将varchar(255)转换为数值

时间:2019-06-01 12:21:49

标签: sql sql-server

我无法将数据类型varchar(255)转换为数字

Amount
-1000
-500
-500,3827
-100,56
-1728,27781

我做了什么:

CAST([Amount] as decimal(10,4) as values

我得到了错误     将数据类型varchar转换为数字时出错。

我需要更改什么?

2 个答案:

答案 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;

道德:从不将数字值存储在字符串中。