我有这样的数据
1234500010
1234500020
1234500021
12345600010
12345600011
123456700010
123456700020
123456710010
模式是 1个数据(3-7位数字的任意数字)+ 2个数据(3位数字的任意数字)+ 3个数据(2位数字的任意数字)
我想创建SQL以仅获取1个数据。 例如我要获取数据12345 我只想要结果
1234500010
1234500020
1234500021
如果我使用“喜欢”,
select *
FROM data
where ID like '12345%' `
我将使用12345
,123456
和1234567
如果我使用equal,我只会得到一个特定的数据。
我可以像平等和平等相结合来获得想要的结果吗?
选择* FROM data,其中data ='12345 +任何2个数据(3位数字)+任何3个数据(2位数字)'
任何人都可以帮忙吗?
添加:很抱歉,如果我没有提到数据类型并进行一些沟通交流。数据类型为char。 @戈登的答案,其他人没有错。它适用于数字和varchar。但不适用于char类型。在这里,我为char数据类型发布了一些图片。 Oracle对char数据类型的规范是固定的长度。因此,如果我输入的长度少于长度,则其余部分将变成一个空格。
非常感谢。希望有人可以为此提供帮助
答案 0 :(得分:2)
答案 1 :(得分:1)
由于您的数据类型为CHAR
,所以戈登的答案对您不起作用。 CHAR
为小于最大限制的字符串添加尾随空格。您可以使用TRIM
来解决此问题,如下所示。但是,您最好使用NUMBER
类型的商店编号,而不是不是 CHAR
或VARCHAR2
,这样会很快引起其他问题或更高版本。
select *
from data
where trim(ID) like '12345_____';
答案 2 :(得分:0)
我认为这可以为您提供所需的解决方案,
create table data(ID number(15));
insert into data values(1234500010);
insert into data values(1234500020);
insert into data values(1234500021);
insert into data values(12345600010);
insert into data values(12345600011);
insert into data values(123456700010);
insert into data values(123456700020);
insert into data values(123456710010);
从ID为“ 12345_____”的数据中选择*
// 5_下划线恰好是5时,2-data(3个下划线)中的任何3位和3-data(2个下划线)中的2位
您将获得(输出):
ID
1234500010
1234500020
1234500021
3行在0.00秒内返回
答案 3 :(得分:0)
您真的不能将相等和LIKE
结合在一起。但是您可以使用正则表达式通过REGEXP_LIKE
函数进行这种搜索:
SELECT *
FROM DATA
WHERE REGEXP_LIKE(ID, '^12345[0-9]{3}[0-9]{2}');
但是,如果我理解正确,对于您的1个数据,您确实需要3到7位数字:
SELECT *
FROM DATA
WHERE REGEXP_LIKE(ID, '^[0-9]{3,7}[0-9]{3}[0-9]{2}');
Oracle regular expression docs here
好运。