【问题标题】:Select alphabetic only strings of three characters length选择三个字符长度的纯字母字符串
【发布时间】:2012-10-30 05:48:09
【问题描述】:

我的表中有一个 varchar 字段,包含字母、数字和混合字母数字值。

我只想从该字段中选择长度为 3 个字符且仅按字母顺序排列的值。

我正在使用甲骨文。

样本数据:

AAA
BBB
12345
CCC25
DDDDD

select 语句应该只返回:

AAA
BBB

我尝试了以下方法,但没有成功。这没有返回任何东西。

select name from MyTable where name like '[a-Z][a-Z][a-Z]';

然后我尝试了以下方法,认为它会返回所有 3 个字符长的结果,它只返回所有内容:

select name from MyTable where name like '%%%';

【问题讨论】:

    标签: sql regex database oracle


    【解决方案1】:

    你可以使用regexp_like函数

    SQL> with x as (
      2    select 'aaa' str from dual union all
      3    select 'bbb' from dual union all
      4    select '12345' from dual union all
      5    select 'CCC25' from dual union all
      6    select 'DDDDD' from dual
      7  )
      8  select *
      9    from x
     10   where regexp_like( str, '^[[:alpha:]]{3}$' );
    
    STR
    -----
    aaa
    bbb
    

    【讨论】:

    • 这是否意味着我必须为表中的每个值编写一个选择语句,就像您在上面的第 2-6 行中所做的那样?我有数千行(准确地说是 64000)。
    • 这只是一个例子。使用 select 中的代码,其中 x 是您的表名,str 是您的列
    • @javaStudent - 您可以直接查询您拥有的任何表(完全摆脱WITH 子句或用针对实际表的查询替换我编写的查询)。由于我们无权访问您的表或数据,因此显示查询工作的最简单方法是组合一个 WITH 子查询,该子查询手动组合您实际提供给我们的数据。
    • 谢谢。我花了将近两个小时试图弄清楚这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-29
    • 1970-01-01
    • 2013-01-16
    • 1970-01-01
    相关资源
    最近更新 更多