Just nu i M3-nätverket
Gå till innehåll

Får inte med decimalerna?


sudd

Rekommendera Poster

Hej! Jag vill att det skall ske en division direkt i en SQL sats enligt följande:

 

UPDATE tabell SET [row]=varde1/varde2 WHERE....

 

Om vi säger att varde1 är 15 och varde2 är 2 så skall ett decimaltal även följa med, uppdateringen fungerar men efter att uppdateringen skett så får jag endast med ett heltal.

 

[row] är av typen decimal i SQL server (det fungerar att skriva med decimaltal direkt i SQL server). Vet någon hur detta skall lösas? Decimaltalen måste ju kunna följa med! *snyft* Hoppas ni har det bra i vårvärmen!

 

Länk till kommentar
Dela på andra webbplatser

Hej Sudd!

 

Jag tror du har fel datatyp i SQL Server.

 

Testa att använda dig utav Float. Fungerar det bättre då?

 

Lycka till!

/ Kristoffer

Windows kunde inte hitta något tangentbord. Tryck F1 för att försöka igen eller F2 för att avbryta.

 

Länk till kommentar
Dela på andra webbplatser

Tack för svaret, ska kolla Float. Men genom att det går att skriva in "manuellt" i SQL server måste den ju kunna behandla även typen decimal? Men jag checkar det på jobbet imorgon, tack så mycket för hjälpen!

 

Länk till kommentar
Dela på andra webbplatser

Kanske beror på 2 saker.

 

varde1 och varde2 är egentligen inga tal utan värde från kolumner, typ så här

UPDATE [tabell] SET [row] = [col1]/[col2] WHERE ...

om det är så och Col1 eller col2 är av typen Int så omvandlas ditt svar till Int också.

 

om det inte är så utan du verkligen har 2 siffror där så kan det bero på att ditt svar antagligen innehåller ett kommatecken.

 

Så SQL satsen blir

UPDATE [tabell] SET [row] = 15,2 WHERE ...

 

och som du vet så avgränsas olika SET med , vilket gör att databasen sätte [row] = 15 och sedan 2 vet jag faktiskt inte vad den gör med...

 

som du märker så gissar jag friskt och gissar också att paranteser säkert kan lösa det sista problemet...

UPDATE [tabell] SET [row] = (15/2) WHERE ...

 

men jag har ingen som helst anning... :)

 

- Magnus

-----------------------------------------------------

Jag är inte kaxig, jag är bara så jävla bäst...

 

Länk till kommentar
Dela på andra webbplatser

Magnus, tack för ännu ett svar som fungerade! Måste säg att jag är imponerad av din kompetens! Detta är inte första gången du hjälper mig med ett (för mig!:) komplex problem. Ta det lugnt med allt!

 

Länk till kommentar
Dela på andra webbplatser

Vilket var rætt då?

 

Sedan så gissade jag friskt så min kompetens kanske inte skall blandas in dær :)

 

- Magnus

-----------------------------------------------------

Jag är inte kaxig, jag är bara så jävla bäst...

 

Länk till kommentar
Dela på andra webbplatser

Magnus Ahlkvist

Ser att du fått hjälp, men vill visa hur jag skulle löst det.

SQL Server omvandlar resultatet av en division till heltal om det är division av två heltal.

 

Prova ex.vis att göra

SELECT 15/2

 

i Query Analyzer, och du får resultatet 7. Alltså inte ens en korrekt avrundning, utan en trunkering av resultatet.

 

I mitt exempel vill jag få ut resultatet av divisionen 1/3 med två decimaler, och gör då:

 

SELECT cast((cast(1 as float)/cast(3 as float)) as numeric(8,2))

 

I ditt exempel:

UPDATE tabell SET [row]=cast((cast(varde1 as float)/cast(varde2 as float)) as numeric(8,2))

 

numeric(x,y) är ett tal med maximalt x antal siffror, och y decimaler. numeric(8,2) är alltså ett tal med maximalt sex heltalssiffror och två decimalsiffror.

 

 

--

Snäll ibland. Rättvis nästan jämt. Elak för det mesta.

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...