【问题标题】:Match name that starts between two characters entered by the user匹配在用户输入的两个字符之间开始的名称
【发布时间】:2017-08-01 13:11:04
【问题描述】:

我需要编写一个基于用户输入两个字母匹配的查询,然后匹配客户表中以两者之间的任何字母开头的任何名称,并将它们放入游标中。我曾尝试使用REGEXP_LIKE,但无法让模式匹配,而且我的想法已经不多了

【问题讨论】:

    标签: plsql oracle-sqldeveloper plsqldeveloper


    【解决方案1】:

    如果它们都以大写字母开头,那么只需使用BETWEEN

    SELECT *
    FROM table1
    WHERE SUBSTR(UPPER("name"),1,1) BETWEEN 'C' AND 'G'
    

    表格

    name
    Alan
    Ben
    Chris
    Dave
    Eddy
    Fred
    Gregg
    Henry
    

    输出

    name
    Chris
    Dave
    Eddy
    Fred
    Gregg
    

    SQL 小提琴:http://sqlfiddle.com/#!4/7cf66/6/0

    【讨论】:

    • 带有G 的名称不在结果列表中。使用这个:between 'C' and chr(ascii('G') + 1)。此外,非 ascii 字符可能存在问题。
    • @Dmitry 我同意,我可以使用一些示例数据/更多信息来提供更全面的答案
    • 名称将始终为大写,没有非 ascii 字符,我可以添加 UPPER() 以确保正确?
    • 是的,拥有WHERE UPPER("name") BETWEEN 'C' AND 'G' 会起作用
    • 非常感谢您!我没有意识到 BETWEEN 会检查第一个字母
    【解决方案2】:

    这是您最初寻找的 REGEXP_LIKE 解决方案。匹配以 c-g 开头的不区分大小写。

    select name
    from table1
    where regexp_like(name, '^[C-G].*', 'i');
    

    【讨论】:

      猜你喜欢
      • 2012-07-11
      • 2018-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-15
      • 2019-01-12
      • 1970-01-01
      相关资源
      最近更新 更多