在Ms-Sql中获取与正则表达式匹配的记录

时间:2018-07-25 20:01:36

标签: sql sql-server

我正在使用以下查询来获取以任何字符开头,具有一堆0并以数字结尾(在这种情况下为1)的所有记录。

where column like '_%[0]1'

但是问题是它甚至还给了我不想要的d0101等。我只想要d0001或r0001。我可以使用它来完全匹配模式,而不是部分使用like吗? ms-sql中还有其他选项吗?

3 个答案:

答案 0 :(得分:2)

SQL-Server并不会真正执行正则表达式,但是您可以像这样生成所需的搜索子句:

where column like '_%1' and column not like '_%[^0]%1'

第二个条件将排除所有在字符串中间使用0以外的字符的情况。

它将允许所有长度的字符串,只要它们以任意字符开头,然后具有任意数量的0并以1结尾。所有其他字符串都不满足where子句。

答案 1 :(得分:0)

create table tst(t varchar(10));

insert into tst values('d0101');
insert into tst values('d0001');
insert into tst values('r0001');

select * from tst where PATINDEX('%00%1', t)>0

or

select * from tst where t like '%00%1'

答案 2 :(得分:-1)

您使用_表示您不在乎其中有什么字符(单个字符),然后使用所需的其余字符串:

DECLARE @ TABLE (val VARCHAR(100))

INSERT INTO @ 
VALUES 
('d0001'),
('f0001'),
('e0005'),
('e0001')


SELECT * 
FROM @ 
WHERE val LIKE '_0001'

此代码只能真正处理您的两个简单示例。如果比较复杂,请将其添加到您的帖子中。