一列height
是我的SQL Server表中的整數類型。我想要做的一個部門,有結果爲十進制我的查詢:如何將SQL Server查詢中的整數轉換爲十進制數?
Select (height/10) as HeightDecimal
我怎麼投,這樣的HeightDecimal
不再是整數?謝謝。
一列height
是我的SQL Server表中的整數類型。我想要做的一個部門,有結果爲十進制我的查詢:如何將SQL Server查詢中的整數轉換爲十進制數?
Select (height/10) as HeightDecimal
我怎麼投,這樣的HeightDecimal
不再是整數?謝謝。
SELECT height/10.0 AS HeightDecimal FROM dbo.whatever;
如果你想有一個特定的精密天平,則這樣說:
SELECT CONVERT(DECIMAL(16,4), height/10.0) AS HeightDecimal
FROM dbo.whatever;
SELECT CAST(height AS DECIMAL(18,0))/10
編輯:這是如何工作的引擎蓋下?
結果類型與兩個參數的類型相同,或者如果它們不同,則由data type precedence table確定。因此,您可以將任何參數轉換爲非整數的參數。
現在DECIMAL(18,0)
,或者你能等效寫只是DECIMAL
,仍然是一種整數類型的,因爲這0
默認的比例意味着「沒有數字的小數點右邊」。因此,在不同的情況下,對四捨五入到整數的工作可能很好 - 這與我們正在努力完成的事情相反。
但是,DECIMALs對於一切都有自己的規則。他們通常是非整數,但總是精確的數字。在我們的例子中,我們強制出現的DECIMAL分區的結果類型是DECIMAL(29,11)。因此,除法結果將被舍入到11個不考慮除數爲10的位置,但除以3時舍入變爲可觀察的。您可以通過操縱左側操作數的比例來控制舍入的數量。通過在整個表達式中放置另一個ROUND或CAST操作,您也可以舍入更多,但不會更少。
相同力學支配在接受的答案的更簡單和更好的解決方案:
SELECT height/10.0
在這種情況下,該除數的類型是DECIMAL(3,1)
和結果的類型是DECIMAL(17,6)
。嘗試除以3,觀察舍入的差異。
如果你只是討厭精度和規模的所有這些討論,只想SQL服務器執行好老雙精度浮點算術從某一點上所有的計算,你可以強制,太:
SELECT height/CAST(10 AS FLOAT(53))
或等價只是
SELECT height/CAST (10 AS FLOAT)
您可以施放高度爲十進制:
select cast(@height as decimal(10, 5))/10 as heightdecimal
或者你把你的價值小數點你被劃分:
declare @height int
set @height = 1023
select @height/10.0 as heightdecimal
看到sqlfiddle用一個例子
select cast (height as decimal)/10 as HeightDecimal
'十進制(任何東西)'?爲什麼不指定? – 2012-04-22 20:10:13
你對分裂是正確的,但可能產生溢出問題,例如乘法。 '十進制(H)* 10'一般可能不等於'十進制(G * 10)',以爲我已經長大習慣投下第一操作 – Dewfy 2012-04-22 20:25:49
之前我同意有明確的轉換前的操作是更好的這樣的方式。但我的觀點是,如果你要說'小數',你應該說'小數(精度,比例)'。 – 2012-04-22 20:58:20
1爲第一部分,但要注意,第二實施例的。這個'CONVERT'是在分裂之後應用的,並且不能給你多於已有的6位小數位數。 – 2012-12-17 12:30:13
完美解決方案!我想第一個表現更好!不是嗎? – Diablo 2016-05-09 08:40:42
@Diablo那麼,你可以測試它,但我懷疑你會發現任何區別。無論如何,如果您需要特定的精度/比例,請在您的應用程序層中進行格式化。 – 2016-05-09 14:33:16