如何检查字符串是否只包含SQL Server中的数字?

时间:2016-06-01 18:33:57

标签: sql sql-server

我正在尝试检查string是否仅包含以下格式的有效数字

123.456
123
.356

但它应该拒绝任何包含非数字的内容,包括双点。以下是一些无效格式

d123.456
123d
12d3
d.1256
12d.456
12.d12
12.d45d
12.45.56

我做了以下

SELECT CASE WHEN '123.00' NOT LIKE '%[^0-9.]%' THEN 'Valid' ELSE 'Invalid' END

除了字符串中有多个点的情况外似乎有效。

如何调整正则表达式只允许一个点,否则返回'无效'?

4 个答案:

答案 0 :(得分:8)

我建议try_convert()

select (case when try_convert(col, float) is not null then 'valid' else 'invalid' end)

一个可能的缺点是指数格式; 1e6例如是有效数字。

另一种选择是where方法;你只需要更完整的逻辑:

select (case when col like '%[^0-9.]%' then 'invalid'
             when col like '%.%.%' then 'invalid'
             else 'valid'
        end)

答案 1 :(得分:1)

TRY_PARSE将允许您将输入值与您决定允许的任何/所有数值数据类型进行比较 - 例如:

SELECT 
   TRY_PARSE('123.456' as int) as [int],
   TRY_PARSE('123.0' as float) as [float],
   TRY_PARSE('d123.456' as int) as [int],
   TRY_PARSE('d123.456' as float) as [float]

FWIW - ISNUMERIC经常被建议,并且肯定是最好的听起来函数名称:-) - 但不会像大多数人所期望的那样工作。 (它允许数学和货币符号等。)

答案 2 :(得分:0)

如果您不依赖于正则表达式,SQL Server可以使用ISNUMERIC函数。

  

当输入表达式求值为有效的数值数据类型时,ISNUMERIC返回1;否则返回0.

答案 3 :(得分:0)

有一个内置函数的SQL Server:

OnClick="Button1_Click"