有没有办法将任何十进制数与 T-SQL 'LIKE' 表达式相匹配?

Kam*_*biz 4 regex sql t-sql sql-server

例如,类似:

SELECT * FROM myTable WHERE myColumn LIKE '[0-9]n.[0-9]n'

当然,我知道上面的语法行不通,但我试图解释一下:n 个数字,后跟一个句点,然后是 n 个数字。谢谢

Bog*_*ean 5

您可以对无符号十进制值使用以下模式:

SELECT  *, 
        CASE 
            WHEN (x.Col1 LIKE '%[0-9]%.%[0-9]%' /*OR x.Col1 LIKE '.%[0-9]%' OR x.Col1 LIKE '%[0-9]%.' OR x.Col1 LIKE '%[0-9]%'*/) 
            AND x.Col1 NOT LIKE '%[^0-9.]%'  
            THEN 1 ELSE 0 
        END AS IsDecimal,
        ISNUMERIC(x.Col1) AS [IsNumeric]
FROM (
    SELECT '1.23' UNION ALL SELECT '.23' UNION ALL SELECT '1.'  UNION ALL SELECT '123'  UNION ALL 
    SELECT NULL UNION ALL SELECT '' UNION ALL SELECT '1A.23'  UNION ALL SELECT '1.2A3'  UNION ALL SELECT 'A.B'  UNION ALL 
    SELECT '.' UNION ALL SELECT '$' 
) x(Col1)

/*
Col1  IsDecimal   IsNumeric
----- ----------- -----------
1.23  1           1
.23   0           1
1.    0           1
123   0           1
NULL  0           0
      0           0
1A.23 0           0
1.2A3 0           0
A.B   0           0
.     0           1
$     0           1
*/
Run Code Online (Sandbox Code Playgroud)

如果取消注释/*OR x.Col1 LIKE '.%[0-9]%' OR x.Col1 LIKE '%[0-9]%.' OR x.Col1 LIKE '%[0-9]%'*/,则将.23 , 1. and 123被视为(也)有效的十进制值。