我可以结合使用相等和相等来获取数据吗?

时间:2018-06-28 02:09:27

标签: sql oracle

我有这样的数据

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%' `

我将使用123451234561234567

获取所有数据。

如果我使用equal,我只会得到一个特定的数据。

我可以像平等和平等相结合来获得想要的结果吗?

选择* FROM data,其中data ='12345 +任何2个数据(3位数字)+任何3个数据(2位数字)'

任何人都可以帮忙吗?

添加:很抱歉,如果我没有提到数据类型并进行一些沟通交流。数据类型为char。 @戈登的答案,其他人没有错。它适用于数字和varchar。但不适用于char类型。在这里,我为char数据类型发布了一些图片。 Oracle对char数据类型的规范是固定的长度。因此,如果我输入的长度少于长度,则其余部分将变成一个空格。 all data result sql

非常感谢。希望有人可以为此提供帮助

4 个答案:

答案 0 :(得分:2)

我想你想要

this
is
a
test

这里是rextester的答案。

答案 1 :(得分:1)

由于您的数据类型为CHAR,所以戈登的答案对您不起作用。 CHAR为小于最大限制的字符串添加尾随空格。您可以使用TRIM来解决此问题,如下所示。但是,您最好使用NUMBER类型的商店编号,而不是不是 CHARVARCHAR2,这样会很快引起其他问题或更高版本。

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

SQLFiddle here

好运。