[英]How to convert a varchar to decimal in a SQL Server query?
In my database I gave CHARGECODE
and CHARGECODE_URGENT
columns with a varchar
datatype and length 15. 在我的数据库中,给
CHARGECODE
和CHARGECODE_URGENT
列的数据类型为varchar
,长度为15。
However to nap I need that two data become decimals. 但是要打na,我需要两个数据变成小数。
Most values are for example (40 or 55). 例如,大多数值是(40或55)。 But there are also 44.00 and -450.
但也有44.00和-450。
So I tried to convert them with CAST and CONVERT. 所以我试图用CAST和CONVERT转换它们。
string cmdText = @"SELECT SUM(CASE WHEN TEST_URGENT = 'T' THEN CAST(CHARGECODE_URGENT AS decimal) ELSE CAST(CHARGECODE AS decimal) END) AS Somme FROM JOB_HEADER";
I also tried: 我也尝试过:
string cmdText = @"SELECT SUM(CASE WHEN TEST_URGENT = 'T' THEN CONVERT(decimal, CHARGECODE_URGENT) ELSE CONVERT(decimal,CHARGECODE) END) AS Somme FROM JOB_HEADER";
I still get this error : 我仍然收到此错误:
An unhandled exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.dll
System.Data.dll中发生了类型为'System.Data.SqlClient.SqlException'的未处理的异常
Additional information: Error converting data type varchar to numeric.
附加信息:将数据类型varchar转换为数字时出错。
Yet I check if the conversion is possible and it seems so. 但是我检查转换是否可行,看起来是否可行。 So I think I have a syntax problem.
所以我认为我有语法问题。 Thanks for your help
谢谢你的帮助
Use TRY_CAST()
or TRY_CONVERT()
: 使用
TRY_CAST()
或TRY_CONVERT()
:
SELECT SUM(CASE WHEN TEST_URGENT = 'T'
THEN TRY_CAST(CHARGECODE_URGENT AS decimal)
ELSE TRY_CAST(CHARGECODE AS decimal)
END) AS Somme
FROM JOB_HEADER;
To find the bad values, you can do: 要找到错误的值,可以执行以下操作:
select CHARGECODE_URGENT
from job_header
where try_cast(CHARGECODE_URGENT as decimal) is null and
test_urgent = 'T';
and: 和:
select CHARGECODE
from job_header
where try_cast(CHARGECODE as decimal) is null and
test_urgent <> 'T';
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.