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

时间:2014-09-30 20:05:48

标签: sql sql-server regex tsql

例如:

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

当然我知道上面的语法不起作用,但我试图解释:n个数字,后跟一个句点,后跟n个数字。 感谢

5 个答案:

答案 0 :(得分:2)

不,MS SQL中的LIKE仅允许单字符匹配。

你可以这样做:[0-9][0-9].[0-9][0-9]匹配00.00

或者像这样的任何组合,但它没有像你正在寻找的计数或其他运算符。

答案 1 :(得分:2)

您可以对无符号小数值使用以下模式:

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
*/

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

答案 2 :(得分:2)

你是否需要n或只需要转换为十进制的任何东西

select cast(varDec as Decimal(p,s)) 
where varDec not like '%[^.1-9]%' 
and varDec not like '%.%.%'
and len(varDec) > 0 
and varDec <> '.'

答案 3 :(得分:1)

您可以使用PATINDEX在MS SQL中进行模式匹配

两个匹配两位数后跟。和两位数。

SELECT *  FROM myTable WHERE PatIndex('[0-9][0-9].[0-9][0-9]', myColumn) >0

答案 4 :(得分:-1)

也许你正在寻找这个?

SELECT * FROM myTable WHERE ISNUMERIC(myColumn) = 1