SQL 服务器检查字符串中的空格、特殊字符和字符
SQL Server Check String for Spaces, Special Characters, and Charcters
我有一份报告生成了一个值列表,这些值应该都是数字,但当前存储为 varchar。在我的导出中,我将 varchar 字符转换为 Int,但是当有人错误地输入 char 或特殊字符时,报告失败,因为无法转换为 INT
Current List
557780
558871
5588a6
5588 7
我需要的是将那些包含空格或字符的值换成错误整数(如 99999999)的东西,因此最终结果将是
557780
558871
99999999
99999999
我知道我可以使用类似这样的东西来做到这一点
CASE WHEN SomeNum LIKE '%_%' THEN 99999999 ELSE SomeNum
WHEN SomeNum LIKE '%a%' THEN 99999999 ELSE SomeNum END
但是有没有更好的方法来单独比较每个字母和特殊承租人?
你可以使用模式
case when SomeNum NOT LIKE '%[^0-9]%' THEN 99999999 ELSE cast(SomeNum as int) END
如果您处于 SQL Server 2008 或更高版本,则可以使用 ISNUMERIC
。请注意,这将匹配货币和小数等。如果您只是在寻找整数,那么您需要使用正则表达式。见雷达的回答。
为了完整起见,他们的例子是这样的:
USE AdventureWorks2012;
GO
SELECT City, PostalCode
FROM Person.Address
WHERE ISNUMERIC(PostalCode)<> 1;
GO
如果您是 SQL Server 2008 之前的版本,您可以使用 Radar 的正则表达式回答
您可以在 SQL 2012+:
上试试这个
SELECT COALESCE(TRY_CONVERT(INT, SomeNum), 99999999) AS Value
FROM YourTable
我有一份报告生成了一个值列表,这些值应该都是数字,但当前存储为 varchar。在我的导出中,我将 varchar 字符转换为 Int,但是当有人错误地输入 char 或特殊字符时,报告失败,因为无法转换为 INT
Current List
557780
558871
5588a6
5588 7
我需要的是将那些包含空格或字符的值换成错误整数(如 99999999)的东西,因此最终结果将是
557780
558871
99999999
99999999
我知道我可以使用类似这样的东西来做到这一点
CASE WHEN SomeNum LIKE '%_%' THEN 99999999 ELSE SomeNum
WHEN SomeNum LIKE '%a%' THEN 99999999 ELSE SomeNum END
但是有没有更好的方法来单独比较每个字母和特殊承租人?
你可以使用模式
case when SomeNum NOT LIKE '%[^0-9]%' THEN 99999999 ELSE cast(SomeNum as int) END
如果您处于 SQL Server 2008 或更高版本,则可以使用 ISNUMERIC
。请注意,这将匹配货币和小数等。如果您只是在寻找整数,那么您需要使用正则表达式。见雷达的回答。
为了完整起见,他们的例子是这样的:
USE AdventureWorks2012;
GO
SELECT City, PostalCode
FROM Person.Address
WHERE ISNUMERIC(PostalCode)<> 1;
GO
如果您是 SQL Server 2008 之前的版本,您可以使用 Radar 的正则表达式回答
您可以在 SQL 2012+:
上试试这个SELECT COALESCE(TRY_CONVERT(INT, SomeNum), 99999999) AS Value
FROM YourTable