Sql 我可以组合like和equal来获取数据吗?
我有这样的数据Sql 我可以组合like和equal来获取数据吗?,sql,oracle,Sql,Oracle,我有这样的数据 1234500010 1234500020 1234500021 12345600010 12345600011 123456700010 123456700020 123456710010 模式是 1-数据(瓦里安3-7位数)+2-数据(任意3位数)+3-数据(任意2位数) 我想创建SQL以仅获取1-data。 例如,我想获取数据12345 我只想要结果 1234500010 1234500020 1234500021 如果我使用“喜欢” 我将使用12345、123456和
1234500010
1234500020
1234500021
12345600010
12345600011
123456700010
123456700020
123456710010
模式是
1-数据(瓦里安3-7位数)+2-数据(任意3位数)+3-数据(任意2位数)
我想创建SQL以仅获取1-data。
例如,我想获取数据12345
我只想要结果
1234500010
1234500020
1234500021
如果我使用“喜欢”
我将使用12345
、123456
和1234567
如果我使用equal,我将只获得一个特定数据
我能把like和equal结合起来得到我想要的结果吗
从数据中选择*,其中数据='12345+任何2-数据(3位)+任何3-数据(2位)'
有人能帮忙吗
补充:如果我没有提到数据类型,并造成一些沟通失误,我深表歉意。数据类型为char@戈登回答,其他人没有错。它适用于number和varchar。但不适用于字符类型。这里我发布了一些char数据类型的图片。Oracle字符数据类型规范是固定长度的。所以如果我输入的长度小于,剩下的部分就会变成一个空格。
多谢各位。希望有人能帮上忙我想你需要:
select *
from data
where ID like '12345_____' -- exactly 5 _
下面是一个演示答案的示例。我想这会为您提供所需的解决方案
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_uu下划线后正好是5,2-data中的任意3位数字(3个下划线)和3-data中的2位数字(2个下划线)
您将获得(输出):
ID
1234500010
1234500020
1234500021
在0.00秒内返回3行您真的无法将相等和
相结合,就像
。但您可以使用正则表达式来执行此类搜索,使用类似于函数的REGEXP\u:
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}');
祝你好运。因为你的数据类型是CHAR
,戈登的答案对你不合适CHAR
为小于最大限制的字符串添加尾随空格。您可以使用TRIM
修复此问题,如图所示。但是,您最好将number存储在number
类型中,而不CHAR
或VARCHAR2
,这迟早会产生其他问题
select *
from data
where trim(ID) like '12345_____';
谢谢你的回复。如果我使用了
select*from-data-where-ID-like'12345\uuuuuuuuuuuuuu'
我还将获得数据12345600112345670011 12345670010 12345670020 123456710010请记住,第一个数据可以是3-7位数字之间的方差。我无法使用uu获取我想要的数据。我尝试了这个,似乎没问题。它显示了你需要的结果。@初学者,我不这么认为。你试过了吗?我尝试了我的数据库,我得到了所有的数据,包括ID为123456和1234567的数据。@ivanprakasa。解决方案是有效的。我已经包括了一个到rextester的链接。@ivanprakasa-你几乎肯定错了。Gordon发布的解决方案要求ID正好是10个字符。如果您得到了其他信息,那么您没有使用Gordon发布的确切查询。您是否在末尾添加了自己的%
?还是做了其他的改变?完全按照发布的方式使用它。有什么原因不能将您的2-data和3-data合并为一个5位数字的单一规范吗?id的数据类型是什么?它是char
还是有尾随空格?是,数据类型为char@BobJarvis对一些规范决定将其分开。即使总数是5位数字,但我不能将2位数据和3位数据合并为一个数字data@ivanprakasa-我不明白。你是说1-data、2-data和3-data之间可能有其他字符?在何种情况下,字符串“12345abc67defgh890”可以接受?是。感谢您的回答,并为此创建SQL。它适用于number和varchar,但似乎不适用于数据类型charThank you@Kaushik Nayak,用于分析另一边的问题,并帮助找出Gordon的答案不适用于我的原因。谢谢你。我真的很感激。对于您的解决方案也是如此。它成功了。我得到了我想要的结果。非常感谢你。谢谢你的建议。实际上是字母和数字的组合。所以它使用了char数据类型。为了便于理解,我的样品数量很多,但我犯了一个错误。这使沟通不畅和混乱。我为此道歉。谢谢所有帮助回答的人。有点离题了。有什么聪明的方法写吗?目前我手动写了5次,我可以声明变量并调用它5次吗?示例变量underbar='\'并从修剪(ID)如'12345'+5*underbar的数据中选择成为select*。我可以这样编写sql吗?@ivanprakasa:是的,您可以使用lpad(:var,5,:var)
where:var是一个声明包含值为“\ux”的绑定变量,您也可以使用plsql变量。非常感谢。我试试看。
select *
from data
where trim(ID) like '12345_____';