我无法将数据类型varchar(255)转换为数字
Amount
-1000
-500
-500,3827
-100,56
-1728,27781
我做了什么:
CAST([Amount] as decimal(10,4) as values
我得到了错误 将数据类型varchar转换为数字时出错。
我需要更改什么?
答案 0 :(得分:0)
所有这些值对于十进制(6,4)太大。让我们尝试一个合适的值。
(注意:在我的语言环境中,将“,”更改为“。”)
DECLARE @MyVar varchar(255) = '-23'
SELECT CAST(@MyVar AS decimal(6,4))
结果为:
-23.0000
拟合最长的(1728,27781)需要十进制(9,5):
DECLARE @MyVar varchar(255) = '1728.27781'
SELECT CAST(@MyVar AS decimal(9,5))
结果为:
1728.27781
由此您可以看到,声明中的第一个数字代表数字的总数,而第二个数字代表小数。小数点本身不是内部格式的一部分。
答案 1 :(得分:0)
最简单的方法可能是:
select CAST(REPLACE([Amount], ',', '.') as decimal(10, 4))
注意:请勿使用values
作为列别名。这是一个SQL关键字和一个SQL Server保留字。
您的问题是该列中的值错误。您可以使用以下方法避免错误:
select TRY_CAST(REPLACE(Amount, ',', '.') as decimal(10, 4))
您可以使用以下方法查找问题:
select amount
from t
where TRY_CAST(REPLACE(Amount, ',', '.') as decimal(10, 4)) is null and Amount is not null;
道德:从不将数字值存储在字符串中。