sql查询以查找遵循特定模式的字符串

erhoui1w  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(448)

我在表中有一个varchar列,我需要在该列中找到与模式匹配的所有值。模式为parta partb partc或parta partb positiveinteger partc。除了数字部分,一切都是固定的。例如


**someColumn**

parta-partb-partc
parta-partb-1-partc
parta-partb-1xyz-partc
parta-partb-123-partc
parta-partb-abc-partc

我的搜索查询应该返回

parta-partb-partc
parta-partb-1-partc
parta-partb-123-partc

到目前为止这是我得到的

SELECT * 
 FROM tableName 
 WHERE 
      someColumn ='parta-partb-partc' 
   OR someColumn LIKE 'parta-partb-%[0-9]-partc'

我无法构造类似的部分来只得到介于正数之间的字符串。

7hiiyaii

7hiiyaii1#

对于mysql,下面的查询给出了预期的结果

SELECT *
FROM
  tableName
WHERE
   someColumn = 'parta-partb-partc'
   OR 
   someColumn REGEXP 'parta-partb-[0-9]+-partc'
;

对于oracle,下面的查询给出了预期的结果

SELECT *
FROM tableName
WHERE
   someColumn = 'parta-partb-partc'
   OR 
   REGEXP_LIKE(someColumn, 'parta-partb-[[:digit:]]+-partc')
;

不幸的是,对于mssql,where子句中不支持regex,因此您必须执行以下操作[具体到您的示例数据]

SELECT *
FROM tableName
WHERE
   someColumn = 'parta-partb-partc'
   OR 
   (    someColumn LIKE 'parta-partb-[0-9]-partc'
    OR  someColumn LIKE 'parta-partb-[0-9]%[0-9]-partc'
    AND someColumn NOT LIKE 'parta-partb-[0-9]%[a-zA-Z]%[0-9]-partc'
    AND someColumn NOT LIKE 'parta-partb-[0-9]%[a-zA-Z]-partc'
   )

相关问题