如何在 SQL 服务器中使用正则表达式检查字符串是否为数字?

How to check a string is numeric using Regex in SQL Server?

IsNumeric 允许以下特殊字符

`SELECT  ISNUMERIC('10.50') as '10.50'
 ISNUMERIC('10,50') as '10,50'
 ,ISNUMERIC('-') as '-'
 ,ISNUMERIC('+') as '+'
 ,ISNUMERIC('$') as '$'
 ,ISNUMERIC('.') as '.'
 ,ISNUMERIC(',') as ','
 ,ISNUMERIC('\') as '\'`

所以,我想使用 RegEx https://regexr.com/4gjhm 来验证我的数字,它必须只允许数字和点。

PATINDEX 的帮助下尝试了正则表达式 ^[0-9]+[.]{0,1}[0-9]*$,但没有得到预期的结果

 `DECLARE @Amount As NVARCHAR(50) = '150';
  SELECT CASE 
            WHEN @Amount LIKE '%^[0-9]+[.]{0,1}[0-9]*$%'
            THEN 1
            ELSE 0
            END AS IsNumericResult`

有效示例:10、10.01、.20 无效示例:10.50.20、10..20 等

是否可以通过 LIKEPATINDEX 在 SQL Server 2017 中实现?

您可以使用 TRY_CAST() or TRY_CONVERT() 而无需正则表达式

SELECT CASE WHEN TRY_CAST(@Amount AS INT) IS NULL THEN 0 ELSE 1 END IsNumericResult

您可以根据需要将 INT 更改为数字或小数。

例如:

SELECT V Value,
       CASE WHEN TRY_CAST(V AS DECIMAL(10,2)) IS NULL
            THEN 0
            ELSE 1
       END IsNumericResult
FROM
(VALUES ('10.50'), ('+'), ('$'), ('-'), ('11')) T(V);

这里有一个 db<>fiddle 看看它是如何工作的。