我在數據庫中的某些數據,如本爲varcharCASE WHEN LEN小數點後是1個加0
當字符的小數點後的量爲1我想增加一個0
4.2
4.80
2.43
2.45
成爲
4.20
4.80
2.43
2.45
任何想法?我目前正在嘗試使用LEFT和LEN,但無法使其工作
我在數據庫中的某些數據,如本爲varcharCASE WHEN LEN小數點後是1個加0
當字符的小數點後的量爲1我想增加一個0
4.2
4.80
2.43
2.45
成爲
4.20
4.80
2.43
2.45
任何想法?我目前正在嘗試使用LEFT和LEN,但無法使其工作
你可以只將它轉換爲相應的數據類型? (或者更好的是,store it as the appropriate data type):
SELECT v,
AsDecimal = CAST(v AS DECIMAL(3, 2))
FROM (VALUES ('4.2'), ('4.80'), ('2.43'), ('2.45')) t (v)
會給:
v AsDecimal
4.2 4.20
4.80 4.80
2.43 2.43
2.45 2.45
如果這不是你可以使用一個選項:其中給出
SELECT v,
AsDecimal = CAST(v AS DECIMAL(4, 2)),
AsVarchar = CASE WHEN CHARINDEX('.', v) = 0 THEN v + '.00'
WHEN CHARINDEX('.', REVERSE(v)) > 3 THEN SUBSTRING(v, 1, CHARINDEX('.', v) + 2)
ELSE v + REPLICATE('0', 3 - CHARINDEX('.', REVERSE(v)))
END
FROM (VALUES ('4.2'), ('4.80'), ('2.43'), ('2.45'), ('54'), ('4.001'), ('35.051')) t (v);
:
v AsDecimal AsVarchar
4.2 4.20 4.20
4.80 4.80 4.80
2.43 2.43 2.43
2.45 2.45 2.45
54 54.00 54.00
4.001 4.00 4.00
35.051 35.05 35.05
最後,如果你hav你需要用ISNUMERIC首先檢查轉換Ë非VARCHAR值,但this has its flaws:
SELECT v,
AsDecimal = CASE WHEN ISNUMERIC(v) = 1 THEN CAST(v AS DECIMAL(4, 2)) END,
AsVarchar = CASE WHEN ISNUMERIC(v) = 0 THEN v
WHEN CHARINDEX('.', v) = 0 THEN v + '.00'
WHEN CHARINDEX('.', REVERSE(v)) > 3 THEN SUBSTRING(v, 1, CHARINDEX('.', v) + 2)
ELSE v + REPLICATE('0', 3 - CHARINDEX('.', REVERSE(v)))
END,
SQLServer2012 = TRY_CONVERT(DECIMAL(4, 2), v)
FROM (VALUES ('4.2'), ('4.80'), ('2.43'), ('2.45'), ('54'), ('4.001'), ('35.051'), ('fail')) t (v);
其中給出:
v AsDecimal AsVarchar SQLServer2012
4.2 4.20 4.20 4.20
4.80 4.80 4.80 4.80
2.43 2.43 2.43 2.43
2.45 2.45 2.45 2.45
54 54.00 54.00 54.00
4.001 4.00 4.00 4.00
35.051 35.05 35.05 35.05
fail NULL fail NULL
如果需要,您可以將varchar轉換爲小數,但它可能不安全,因爲您不知道它是否會始終工作:
CONVERT(decimal(10,2), MyColumn)
那樣的事情。
需要注意的是,如果你的變數是4.103,那麼精度值(在上面的例子中,'2')將會關閉值。
此外,我注意到,如果你使用SQL Server 2012中,有現在 'TRY_CONVERT' 和 'TRY_CAST' 這將是更安全:
感謝您的回覆,我已經試過這樣做,但它只是說'將varchar轉換爲數字時出錯我使用ISNUMERIC進行了檢查,所有值都是數字:/任何想法? – neeko
如果這是查詢的結果,那麼你確實有一些SQL不能轉換的東西。看看這裏的一些選項,瞭解如何防範這種情況的想法: http://stackoverflow.com/questions/14153665/sql-server-error-converting-data-type-varchar-to - 數字 – dougajmcdonald
你可以發佈你的整個查詢來看看嗎? – dougajmcdonald
CREATE TABLE [dbo].[test10](
[number] [nvarchar](10) NULL
)
--insert的值。
只是一個除了以上答案由@dougajmcdonald
select convert(decimal(10,2),number) as Added0 from test10 where ISNUMERIC(number) <> 0
這太神奇了,非常感謝你!我運行驗證檢查它是否插入ISNUMERIC之前,希望他們應該都是有效的 – neeko