例如:
SELECT * FROM myTable WHERE myColumn LIKE '[0-9]n.[0-9]n'
当然我知道上面的语法不起作用,但我试图解释:n个数字,后跟一个句点,后跟n个数字。 感谢
答案 0 :(得分:2)
答案 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