Как проверить, является ли строка числовой с помощью Regex в SQL Server? - PullRequest
0 голосов
/ 28 июня 2019

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 для проверки моего числа, которое должно содержать только цифры и точки.

Пробовал Regex ^ [0-9] + [.] {0,1} [0-9] * $ с помощью PATINDEX, но не получил ожидаемых результатов

 `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?

1 Ответ

3 голосов
/ 28 июня 2019

Вы можете использовать TRY_CAST() или TRY_CONVERT() без необходимости выражения Regex

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 <> скрипка , чтобы увидеть, как эторабочий.

...