简体   繁体   English

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

[英]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. 在我的数据库中,给CHARGECODECHARGECODE_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM