我在SQL Server 2008中工作。我正在尝试测试一个字符串(varchar)是否只有数字字符(0-9)。我知道IS_NUMERIC函数可能会产生虚假的结果。(我的数据可能有$ signs,它不应该通过测试。)所以,我避免使用这个函数。
我已经有一个测试来查看字符串是否有任何非数字字符,即,
some_column LIKE '%[^0123456789]%'
我认为唯一的数字测试应该是类似的东西,但我现在一片空白。有什么想法吗?
发布于 2015-02-07 00:45:26
使用Not Like
where some_column NOT LIKE '%[^0-9]%'
演示
declare @str varchar(50)='50'--'asdarew345'
select 1 where @str NOT LIKE '%[^0-9]%'
发布于 2015-02-07 00:30:30
对于SQL2008和更高版本,有一个名为ISNUMERIC的系统函数。举个例子:
SELECT myCol
FROM mTable
WHERE ISNUMERIC(myCol)<> 1;
我做了几个快速测试,还进一步查看了文档:
ISNUMERIC returns 1 when the input expression evaluates to a valid numeric data type; otherwise it returns 0.
例如,这意味着它是相当可预测的。
-9879210433
会通过,但987921-0433
不会。$9879210433
会通过,但9879210$433
不会。
因此,使用这些信息,您可以根据list of valid currency symbols和+
& -
字符进行剔除。
发布于 2019-02-27 04:07:47
解决方案:where some_column NOT LIKE '%[^0-9]%'
是正确的。
只有一个重要的注意事项:当字符串列= ''
(空字符串)时添加验证。这个场景将返回''
也是一个有效的数字。
https://stackoverflow.com/questions/28370295
复制相似问题