我試圖圍繞一些字段。當我有59天,我想將其更改爲60劃分兩個字段時得到完整數字
的問題是,當我使用此代碼,將59改爲30,因爲圓形是1
select round(1.9666,0)*30, round(59/30,0)*3'
結果該查詢的第一個字段爲60,第二個字段爲30。問題是,當我試着:
select 59/30
結果是1,我需要一個完整的答案是1.9666 ...
我怎麼能做到嗎?
我試圖圍繞一些字段。當我有59天,我想將其更改爲60劃分兩個字段時得到完整數字
的問題是,當我使用此代碼,將59改爲30,因爲圓形是1
select round(1.9666,0)*30, round(59/30,0)*3'
結果該查詢的第一個字段爲60,第二個字段爲30。問題是,當我試着:
select 59/30
結果是1,我需要一個完整的答案是1.9666 ...
我怎麼能做到嗎?
SELECT cast(59 AS FLOAT)/cast(30 AS FLOAT)
由於原始數字是整數,SQL假定您需要整數輸出。
爲確保您得到一個帶小數點的位數,您需要首先將數據類型從整數int
更改爲浮點數float
。
這就是CAST命令的作用。
編輯:評論者建議你轉投DECIMAL。原則是一樣的,但你需要提供更多的論據。要投到十進制使用類似於:
cast(59 as DECIMAL(18, 3))
第一個參數(18)是您希望允許在小數中的數字總數。第二個參數(3)是小數點後您想要的數字。
更準確的建議是正確的 - 正如你會看到如果你在這個答案中一個接一個地運行SELECT語句。但在這種特殊情況下,它只會產生很小的差異。
由於您除以的數字是INT
(左側的數據類型無關緊要),因此SQL Server將返回INT
作爲答案。
如果您想要一個帶小數點的數字作爲結果,則需要除以一。
不要轉換爲FLOAT
的答案可能不是你想要的(浮動一般是不準確的,是'approximations'):
SELECT 59/CAST(30 AS FLOAT) -- = 1.96666666666667
CAST
師的右手側的DECIMAL
:
SELECT 59/CAST(30 AS DECIMAL(10, 2)) -- = 1.96666
不要'CAST'到'FLOAT',投到'DECIMAL'。浮點數不準確 –