[英]Convert a VARCHAR(n) to exact FLOAT
我有一個會計申請。 在我的應用程序中,用戶可以確定十進制數的數量,因此我不能使用decimal
數據類型,因為它具有固定的精度和decimal
。
根據本主題, 對會計應用程序美元金額使用浮點數還是小數? ,請勿使用float,因為它只是一個近似值。 因此,我改用VARCHAR(n)
作為列的數據類型。
現在,我想在此列上使用SUM
函數,並且想要該列的確切值。 我該怎么做?
您不能以常規方式對CHAR
數據類型求和。 您需要將其CONVERT
為數字,然后進行計算。
我的建議是使用DECIMAL
,如果最終用戶可以更改精度和小數位數,請考慮您可以擁有的最大值,並讓SQL Server將其他數字設置為0
例如,如果您選擇DECIMAL(19, 4)
且最終用戶選擇僅具有2個小數位,則SQL Server將其他兩位數字設為0
CREATE TABLE test(mny DECIMAL(18, 4))
INSERT INTO test VALUES (239428394.87)
SELECT * FROM test
OUTPUT
-----------------
239428394.8700
您也可以選擇使用MONEY
數據類型。
如果要使用CHAR
,請嘗試以下操作:
DECLARE @precision INT
,@scale INT
,@output VARCHAR(1000)
,@input CHAR(10) = '234234.453'
SELECT @precision = LEN(LEFT(@input, CHARINDEX('.', @input) - 1)) + LEN(SUBSTRING(@input,CHARINDEX('.', @input) + 1, LEN(@input)))
,@scale = LEN(SUBSTRING(@input, CHARINDEX('.', @input) + 1, LEN(@input)))
SELECT @Output = 'SELECT SUM(CONVERT(DECIMAL(' + CONVERT(VARCHAR(100), @precision) + ', ' + CONVERT(VARCHAR(100), @scale) + '), ' + CONVERT(VARCHAR(100), @input) + '))'
SELECT @Output
EXEC (@Output)
您可以動態獲取每個數字的精度和小數位數並進行動態查詢
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.