如何在SQL Server查询中将varchar转换为十进制?

时间:2019-04-10 11:37:36

标签: c# mysql sql .net

在我的数据库中,我给CHARGECODECHARGECODE_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转换为数字时出错。

但是我检查是否可以进行转换,看来可以。所以我认为我有语法问题。谢谢您的帮助

1 个答案:

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