2015-04-21 71 views
0

我試圖圍繞一些字段。當我有59天,我想將其更改爲60劃分兩個字段時得到完整數字

的問題是,當我使用此代碼,將59改爲30,因爲圓形是1

select round(1.9666,0)*30, round(59/30,0)*3' 

結果該查詢的第一個字段爲60,第二個字段爲30。問題是,當我試着:

select 59/30 

結果是1,我需要一個完整的答案是1.9666 ...

我怎麼能做到嗎?

回答

0
SELECT cast(59 AS FLOAT)/cast(30 AS FLOAT) 

由於原始數字是整數,SQL假定您需要整數輸出。

爲確保您得到一個帶小數點的位數,您需要首先將數據類型從整數int更改爲浮點數float

這就是CAST命令的作用。

編輯:評論者建議你轉投DECIMAL。原則是一樣的,但你需要提供更多的論據。要投到十進制使用類似於:

cast(59 as DECIMAL(18, 3)) 

第一個參數(18)是您希望允許在小數中的數字總數。第二個參數(3)是小數點後您想要的數字。

更準確的建議是正確的 - 正如你會看到如果你在這個答案中一個接一個地運行SELECT語句。但在這種特殊情況下,它只會產生很小的差異。

+1

不要'CAST'到'FLOAT',投到'DECIMAL'。浮點數不準確 –

1

由於您除以的數字是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