SQL Server检查空格,特殊字符和字符的字符串

时间:2015-01-14 18:14:51

标签: sql sql-server sql-server-2012

我有一个报告,它生成一个值列表,这些值应该都是数字但当前存储为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

但是,有更好的方法可以单独比较每个字母和特殊的租船人吗?

3 个答案:

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