我正在使用以下查询来获取以任何字符开头,具有一堆0并以数字结尾(在这种情况下为1)的所有记录。
where column like '_%[0]1'
但是问题是它甚至还给了我不想要的d0101等。我只想要d0001或r0001。我可以使用它来完全匹配模式,而不是部分使用like吗? ms-sql中还有其他选项吗?
答案 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'
此代码只能真正处理您的两个简单示例。如果比较复杂,请将其添加到您的帖子中。