查找特定字符串格式的 Oracle 查询
Posted
技术标签:
【中文标题】查找特定字符串格式的 Oracle 查询【英文标题】:Oracle query looking for particular string format 【发布时间】:2017-06-05 18:02:14 【问题描述】:我正在使用 Oracle 11g 数据库,我需要在其中运行一个查询,该查询返回具有特定格式值的所有行。
也就是说,我需要找到所有具有类似“abc1234”的值的行。实际值并不重要....我需要的是找到前 3 个字符为 alpha 且后续 4 个字符均为数字的所有行。
任何意见将不胜感激。
【问题讨论】:
【参考方案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;
【讨论】:
您好,欢迎来到本网站!也许您可以解释一下这可能是如何工作的,以及为什么您似乎拥有三个几乎相同的代码副本。另外,我很怀疑,因为cola
、colb
和 colc
似乎没有在任何地方定义。以上是关于查找特定字符串格式的 Oracle 查询的主要内容,如果未能解决你的问题,请参考以下文章
oracle sql 实现查询时把一字符串按逗号分割,返回分割后的份数?
如何使用 oracle sql 命令查找 clob 数据列的特定子部分(实际存储字符)?