我有一个报告,它生成一个值列表,这些值应该都是数字但当前存储为varchar。在我的导出中,我将varchar字符作为Int进行转换但是当某些错误输入char或特殊字符时,报告失败,因为无法转换为INT
Current List
557780
558871
5588a6
5588 7
我需要的是将那些包含空格或字符的值替换为错误int,如99999999,因此最终结果将是
557780
558871
99999999
99999999
我知道我可以通过使用类似的东西来做到这一点
CASE WHEN SomeNum LIKE '%_%' THEN 99999999 ELSE SomeNum
WHEN SomeNum LIKE '%a%' THEN 99999999 ELSE SomeNum END
但是,有更好的方法可以单独比较每个字母和特殊的租船人吗?
答案 0 :(得分:2)
你可以使用模式
case when SomeNum NOT LIKE '%[^0-9]%' THEN 99999999 ELSE cast(SomeNum as int) END
答案 1 :(得分:2)
如果您在SQL Server 2008或更晚,则可以使用ISNUMERIC
。请注意,这将匹配金钱和小数等。如果您只是寻找整数,那么您需要正则表达式。请参阅雷达的答案。
他们的例子就是为了完整性:
USE AdventureWorks2012;
GO
SELECT City, PostalCode
FROM Person.Address
WHERE ISNUMERIC(PostalCode)<> 1;
GO
如果你是SQL Server 2008之前,可以使用雷达的正则表达式答案
答案 2 :(得分:2)
您可以在SQL 2012 +上尝试此操作:
SELECT COALESCE(TRY_CONVERT(INT, SomeNum), 99999999) AS Value
FROM YourTable