【问题标题】:SQL / REGEX pattern matchingSQL / REGEX 模式匹配
【发布时间】:2018-05-29 17:07:06
【问题描述】:

我想通过 sql 使用正则表达式来查询一些数据以返回值。下面返回的唯一有效值是“GB”和“LDN”,或者也可以是“GB-LDN”

G-GB-LDN-TT-TEST
G-GB-LDNN-TT-TEST
G-GBS-LDN-TT-TEST

在写入时,第一个 GB 集需要有 2 个字符,LDN 需要有 3 个字符。两组/组均由 - 符号分隔。我有点需要提取数据,但同时确保它在该模式内。我看了一下正则表达式,但看不到如何操作,它就像子字符串,但我看不到。

【问题讨论】:

  • 您使用的是什么关系型数据库?
  • SQL SERVER 2014
  • A-AA-AAA 也能匹配吗?
  • 如果您真的只需要 2 或 3 个可能包含在连字符中的字符,_ 是一个单字符通配符。你可以让 LIKE '' OR '-' OR '-' OR '--' OR '' OR '-' 等等。如果这是你想要的方向,我可以写一些作为更好的答案

标签: sql regex sql-server-2014


【解决方案1】:

如果我理解正确,您仍然可以使用substring() 函数来提取由- 分隔的字符串部分。

select left(parsename(a.string, 3), 2)  +'-'+ left(parsename(a.string, 2) ,3)  from
    (
        select replace(substring(data, 1, len(data)-charindex('-', reverse(data))), '-', '.') [string] from <table>
    ) a

如上所述,您还可以定义提取字符串的长度。

结果:

GB-LDN
GB-LDN
GB-LDN

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-09
    • 1970-01-01
    • 2020-11-07
    • 1970-01-01
    相关资源
    最近更新 更多