如何在 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 等
是否可以通过 LIKE
或 PATINDEX
在 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 看看它是如何工作的。
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 等
是否可以通过 LIKE
或 PATINDEX
在 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 看看它是如何工作的。