【发布时间】:2017-06-05 18:02:14
【问题描述】:
我正在使用 Oracle 11g 数据库,我需要在其中运行一个查询,该查询返回具有特定格式值的所有行。
也就是说,我需要找到所有具有类似“abc1234”的值的行。实际值并不重要....我需要的是找到前 3 个字符为 alpha 且后续 4 个字符均为数字的所有行。
任何意见将不胜感激。
【问题讨论】:
标签: oracle
我正在使用 Oracle 11g 数据库,我需要在其中运行一个查询,该查询返回具有特定格式值的所有行。
也就是说,我需要找到所有具有类似“abc1234”的值的行。实际值并不重要....我需要的是找到前 3 个字符为 alpha 且后续 4 个字符均为数字的所有行。
任何意见将不胜感激。
【问题讨论】:
标签: oracle
可能不准确,因为我没有方便测试的 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
【讨论】:
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 似乎没有在任何地方定义。