Hej, Nja, det där ger ju 2 från 1,99. Trådskaparen vill ju s k trunkering. Vanligaste är ju floor, round, fix, trunc och truncate. Round som Niklas föreslår är nog enklast: SELECT ROUND(fältnamn, 0, 1) FROM MyTable ger 1.00 Finns en fin tabell ganska långt ner på Mmmmmmm Scale (skala) anger hur många siffror till höger om decimalkommat som ska lagras i databasen. Om du som i Håkans exempel sätter scale = 0 och försöker inserta 10.8 kommer databasen att lagra värde 11, och inga typkonverteringar/trunkeringar i världen kommer ge dig 10.8 åter. Mmmm... självklart. Hej och tack för alla svar.Konvertera decimal till number SQL
Jag har i min tabell en kolumn som är av typen decimal.
Jag skulle i min sql-fråga vilja visa bara heltalsbiten av siffran, dvs innehåller kolumnen 1.23 ska 1 visas, 1.99 ska också 1 visas.
Finns det någon bra konverteringsfunktion i SQL för detta?
// David Sv: Konvertera decimal till number SQL
SELECT CAST(kolumnen AS int) AS heltalsdelen FROM tabellen
borde funka
Sv:Konvertera decimal till number SQL
Sv: Konvertera decimal till number SQL
En annan variant:
1. Skapa en tabell med alla heltal som finns. Kalla den Heltal, med en kolumn n.
2. Kör en SELECT n FROM Heltal, DinTabell WHERE DinTabell.Tal<n AND DinTabell.Tal>(n-1)
;)Sv:Konvertera decimal till number SQL
SELECT ROUND(fältnamn, 0, 1) FROM MyTable
Kolla på Round i books online om du vill förstå vad du gör.Sv: Konvertera decimal till number SQL
SELECT CONVERT(int, fätnamn) ger 1 (om fältnamn innehåller 1.99)
/HåkanSv:Konvertera decimal till number SQL
http://msdn2.microsoft.com/en-us/library/ms187928.aspx
som visar vilka konverteringar som ger avrundning respektive trunkering. T.ex. ger en cast från Numeric eller float -> int trunkering och inget annat.
"For example, the result of the following conversion is 10:
SELECT CAST(10.6496 AS int) "
Så nej, den metod jag skrev bör inte konvertera 1.99 till 2.Sv: Konvertera decimal till number SQL
Mer spinoff i ämnet...
Om man kör Som Tomas Skrev: SELECT CAST(10.6496 AS int) eller
SELECT CONVERT(int, 10.6496) så blir det mycket riktigt 10.
Gör man så här: CREATE TABLE dbo.Test (val decimal NOT NULL) (man vet ju inte hur trådskaparen har deklarerat sitt decimal fält)
INSERT INTO dbo.Test VALUES (10.6496)
Då ger SELECT CAST(val AS int) FROM Test 11.
Om du i DDLen skriver t.ex decimal(6,0), så får du också 11.
Men, om du anger en skala större än 0, t.ex. decimal(6,1) så får du 10.
/HåkanSv:Konvertera decimal till number SQL
Vi vet ju förvisso inte hur trådskaparen deklarerat sin kolumntyp, men den torde ju rimligen ha scale > 0 (annars bör ju han ha märkt att nåt är galet :P).Sv: Konvertera decimal till number SQL
Bra med förtydliganden.
Jag ville visa vad olika "användarfall" får för "utfall"... :-)
/HåkanSv:Konvertera decimal till number SQL
Mitt fält är definierat som decimal(5,2)
och om jag kör följande fråga får jag rätt resultat
SELECT CAST(kolumn AS int) AS heltalsdelen, kolumn FROM tabell
1 | 1,92
2 | 2.08
osv.