【问题标题】:ORACLE SQL - REGEXP_LIKE Contains First Character As a Number and Second Character as an AlphabetORACLE SQL - REGEXP_LIKE 包含作为数字的第一个字符和作为字母的第二个字符
【发布时间】:2020-05-13 03:22:57
【问题描述】:

我正在尝试在 Oracle 中生成一个查询,我可以在其中获取字符串中第一个字符为 3 或 4 且第二个字符是字母表的记录。其余的可以是其他任何东西。

像这样的

    SELECT COL1 FROM TABLE
WHERE REGEXP_LIKE (COL1, '3[A-Za-Z]')
OR REGEXP_LIKE (COL1, '4[A-Za-z]')

我确实得到了输出,但对于少数记录,数据不是以 3 或 4 开头。 这意味着它会选择列中任意位置同时包含 3 和 An 字母的那些记录。

例如:10573T2 (10573T2)。我必须查询应该以 3 或 4 开头并且下一个字符应该是字母的记录。

任何帮助都会很棒

【问题讨论】:

    标签: sql oracle


    【解决方案1】:
    SQL> with test (col) as
      2    (select '10573T2' from dual union all
      3     select '3A1234F' from dual union all
      4     select '23XXX02' from dual union all
      5     select '4GABC23' from dual union all
      6     select '31234FX' from dual
      7    )
      8  select col
      9  from test
     10  where regexp_like(col, '(^3|^4)[[:alpha:]]');
    
    COL
    -------
    3A1234F
    4GABC23
    
    SQL>
    
    • 3| 开头^ 4
    • 后跟一个字母[[:alpha:]]

    至于您的^ 疑问:该角色有两个角色:

    • [^ ... ] - 不匹配字符列表:匹配不在列表中的任何字符...
    • ^ - 行首锚点:仅匹配出现在行首的后续表达式。

    【讨论】:

    • 非常感谢。有用!我假设'^'代表NOT,因为不包括^后面的字符。例如 ^3 的含义不包括 3。
    • 不客气。我添加了更多关于 ^ 字符用法的信息;请看一下。
    【解决方案2】:

    您需要将模式锚定在字符串的开头:

    REGEXP_LIKE(COL1, '^[34][A-Za-z]')
    

    Here 是一个数据库小提琴

    【讨论】:

    • 谢谢!虽然这会引发一个错误,指出它是一个无效的范围。 Littlefoot 解释的上述评论得到了完美的结果。
    • @ChiragRaj 。 . .这是我错过的原始问题中的错字。我修复了这个答案。
    猜你喜欢
    • 2014-07-08
    • 2021-11-14
    • 1970-01-01
    • 2018-04-23
    • 1970-01-01
    • 2022-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多