代码之家  ›  专栏  ›  技术社区  ›  asok Buzz

在MS SQL中获取与regex匹配的记录

  •  1
  • asok Buzz  · 技术社区  · 6 年前

    我使用下面的查询来获取以任何字符开头、包含大量0和以数字结尾(在本例中为1)的任何记录。

    where column like '_%[0]1'
    

    但问题是,它甚至还把我的D0101等,我不想要。我只想要D0001或R001。我可以用它来精确匹配图案,而不是部分使用like吗? MS SQL中还有其他选项吗?

    3 回复  |  直到 6 年前
        1
  •  2
  •   Carsten Massmann    6 年前

    SQL Server实际上不执行正确的正则表达式,但可以生成如下所需的搜索子句:

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

    第二个条件将排除除 0 在绳子的中间。

    它将允许所有可能长度的字符串,前提是它们以任意字符开头,然后具有任意数量的 然后用 1 . 所有其他字符串都不满足WHERE子句。

        2
  •  0
  •   CoderRambo    6 年前
    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'
    
        3
  •  -1
  •   dfundako    6 年前

    您可以使用u来表示您不在乎其中包含什么字符(单个字符),然后使用所需字符串的其余部分:

    DECLARE @ TABLE (val VARCHAR(100))
    
    INSERT INTO @ 
    VALUES 
    ('d0001'),
    ('f0001'),
    ('e0005'),
    ('e0001')
    
    
    SELECT * 
    FROM @ 
    WHERE val LIKE '_0001'
    

    这段代码只处理两个简单的例子。如果更复杂,请将其添加到您的帖子中。