我需要查询表中的行,其中一列与一个字符串相匹配,该字符串的定义特征是一个特定长度的字母数字字符串(比如4),后跟一个“:”后跟一个整数。
我尝试了以下
select * from mytable where col1 like '[]{4}:%'
select * from mytable where col1 like '.{4}:%'
这些都不起作用。我知道我甚至没有尝试确保“:”后面的部分是一个整数。
答案 0 :(得分:2)
SQL Server不直接支持正则表达式(如果你搜索一下,你可以找到一些通过用户定义的函数添加它们的教程)。
LIKE
不支持量词,但它确实有通配符和轻量级字符类。
下划线将匹配任何字符:
SELECT col1
FROM data
WHERE col1 LIKE '____:%';
或者您可以指定要匹配的字符范围:
SELECT col1
FROM data
WHERE col1 LIKE '[a-z0-9][a-z0-9][a-z0-9][a-z0-9]:%';
请参阅这些live on SQLFiddle。
要指定第二部分必须仅包含数字,可以使用其他条件:
SELECT col1
FROM data
WHERE col1 LIKE '[a-z0-9][a-z0-9][a-z0-9][a-z0-9]:%'
AND col1 NOT LIKE '[a-z0-9][a-z0-9][a-z0-9][a-z0-9]:%[^0-9]%';
答案 1 :(得分:1)
您可以结合使用charindex
,substring
和isnumeric
CREATE TABLE MyTable
(
col1 varchar(20),
col2 varchar(50)
)
INSERT INTO MyTable
VALUES
('ABCD:123', 'Value 123'),
('1234:1234', 'Value 1234'),
('xyz:1234', 'should not be selected'),
('cdef:abcd', 'should not be selected too')
SELECT *
FROM MyTable
WHERE CHARINDEX(':', col1, 0) = 5 AND
ISNUMERIC(SUBSTRING(col1, CHARINDEX(':', col1) + 1, 20)) = 1
答案 2 :(得分:0)
这很难看,但这应该可以解决正整数的问题:
;WITH test AS (
SELECT expr = '1234:3421'
UNION ALL SELECT '1234:25'
UNION ALL SELECT '1234:xx')
select *
from test
where
expr like '%:[0-9]'
OR expr like '%:[0-9][0-9]'
OR expr like '%:[0-9][0-9]'
OR expr like '%:[0-9][0-9][0-9]'
OR expr like '%:[0-9][0-9][0-9][0-9]'
OR expr like '%:[0-9][0-9][0-9][0-9][0-9]'
OR expr like '%:[0-9][0-9][0-9][0-9][0-9][0-9]'
OR expr like '%:[0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
OR expr like '%:[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
OR expr like '%:[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
OR expr like '%:[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'