【问题标题】:How to select from table all names that started on any letter - ORACLE如何从表中选择以任何字母开头的所有名称 - ORACLE
【发布时间】:2021-12-18 20:31:40
【问题描述】:

如何从表中选择包含任何字母的所有名称? 例如,如果变量是 'BANANA' 就很好,如果变量是 '*895-+59' 就不好了

IF variable LIKE '%A-Z%' THEN
        dbms_output.put_line('GREAT');

【问题讨论】:

    标签: sql oracle plsql sql-like


    【解决方案1】:

    如何从表中选择所有包含任何字母的名称?

    您不能在LIKE 比较中使用正则表达式,但可以在REGEXP_LIKE 中使用它们:

    SELECT name
    FROM   table_name
    WHERE  REGEXP_LIKE(name, '[A-Za-z]')
    

    如果您希望列以字母开头,则将其锚定到字符串的开头:

    SELECT name
    FROM   table_name
    WHERE  REGEXP_LIKE(name, '^[A-Za-z]')
    

    如果您想输出GreatNot Great,则将其放入CASE 表达式而不是WHERE 过滤器中:

    SELECT name,
           CASE 
           WHEN REGEXP_LIKE(name, '[A-Za-z]')
           THEN 'Great'
           ELSE 'Not Great'
           END AS is_great
    FROM   table_name
    

    【讨论】:

    • 非常感谢,现在我明白了:D
    • 如果我只想取以字母 A 和 G 开头的名字,你能告诉我括号里应该是什么吗?
    • @MASTERSIPL 只是 A 和 G '^[AG]'(或 '^[AGag]',如果您还想要小写字母)。但你也可以使用name LIKE 'A%' or name LIKE 'G%' 而不是正则表达式)。
    【解决方案2】:

    您可以使用REGEXP_SUBSTR() 函数和条件,例如

    SELECT DECODE(SIGN(LENGTH(REGEXP_SUBSTR('<your_expression>','[a-zA-Z]'))),1,'Great','Bad')
      FROM your_table
    

    Demo

    【讨论】:

      猜你喜欢
      • 2022-07-13
      • 1970-01-01
      • 2021-08-30
      • 2020-04-07
      • 2021-12-31
      • 2016-10-18
      • 1970-01-01
      • 2022-07-21
      • 1970-01-01
      相关资源
      最近更新 更多