在我的数据库中,我给CHARGECODE
和CHARGECODE_URGENT
列提供了varchar
数据类型和长度15。
但是要小睡一下,我需要两个数据变成小数。
大多数值例如(40或55)。但是也有44.00和-450。
所以我试图用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";
我也尝试过:
string cmdText = @"SELECT SUM(CASE WHEN TEST_URGENT = 'T' THEN CONVERT(decimal, CHARGECODE_URGENT) ELSE CONVERT(decimal,CHARGECODE) END) AS Somme FROM JOB_HEADER";
我仍然收到此错误:
类型的未处理的异常 'System.Data.SqlClient.SqlException' 出现在system.data.dll
其他信息:将数据类型varchar转换为数字时出错。
但是我检查是否可以进行转换,看来可以。所以我认为我有语法问题。谢谢您的帮助
答案 0 :(得分:1)
使用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;
要查找不良值,您可以执行以下操作:
select CHARGECODE_URGENT
from job_header
where try_cast(CHARGECODE_URGENT as decimal) is null and
test_urgent = 'T';
和:
select CHARGECODE
from job_header
where try_cast(CHARGECODE as decimal) is null and
test_urgent <> 'T';