【问题标题】:Oracle query looking for particular string format查找特定字符串格式的 Oracle 查询
【发布时间】:2017-06-05 18:02:14
【问题描述】:

我正在使用 Oracle 11g 数据库,我需要在其中运行一个查询,该查询返回具有特定格式值的所有行。

也就是说,我需要找到所有具有类似“abc1234”的值的行。实际值并不重要....我需要的是找到前 3 个字符为 alpha 且后续 4 个字符均为数字的所有行。

任何意见将不胜感激。

【问题讨论】:

    标签: oracle


    【解决方案1】:

    可能不准确,因为我没有方便测试的 Oracle 服务器,但这样的事情应该会让你朝着正确的方向开始:

    SELECT * FROM your_table WHERE REGEXP_LIKE(your_column, '([a-z]\3[0123456789]\4', 'i')

    这将检查表中指定列包含字母字符 A 到 Z 3 次后跟 4 个数字的所有行并返回该列表。最后的'i' 只是说忽略字母部分的大小写。如果您愿意,您可以选择不使用该选项。

    这里有几个链接以及有关regexp_like 语法的更多信息:

    Oracle SQL - REGEXP_LIKE contains characters other than a-z or A-Z

    https://docs.oracle.com/cd/B28359_01/server.111/b28286/conditions007.htm#SQLRF00501

    【讨论】:

      【解决方案2】:
      Try it this will work definitely:
      
      Let's take a sample example:
      
      For example, create a sample table 
      
      CREATE TABLE bob (
               empno      VARCHAR2(10) NOT NULL,
               ename      VARCHAR2(15) NOT NULL,
               ssn        VARCHAR2(10) NOT NULL);
      
      Insert data into that table
      
      Insert into bob ( empno,ename,ssn) values ('abC0123458','zXe5378023','0pl4783202');
      Insert into bob ( empno,ename,ssn) values ('0123abcdef','a12dldfddd','Rns0101010');
      
      
      Query to select the all the columns 
      
      select * from bob 
      where   length(trim(translate(substr(empno,1,3),'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',' '))) IS NULL 
      AND 
      length(trim(translate(substr(empno,4,4),'0123456789',' '))) IS NULL;
      
      
      
      To do the same thing on multiple columns use union operator
      
      
      select * from bob 
      where   length(trim(translate(substr(empno,1,3),'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',' '))) IS NULL 
      AND 
      length(trim(translate(substr(empno,4,4),'0123456789',' '))) IS NULL;
      union
      select * from bob 
      where   length(trim(translate(substr(ename,1,3),'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',' '))) IS NULL 
      AND 
      length(trim(translate(substr(ename,4,4),'0123456789',' '))) IS NULL;
      

      【讨论】:

      • 您好,欢迎来到本网站!也许您可以解释一下这可能是如何工作的,以及为什么您似乎拥有三个几乎相同的代码副本。另外,我很怀疑,因为 colacolbcolc 似乎没有在任何地方定义。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 2012-02-12
      • 2019-10-15
      • 2014-03-30
      • 2023-04-03
      相关资源
      最近更新 更多