oracle exists判断一个日期格式的字段是否存在逗号拼接的字符串日期里

6 篇文章 0 订阅
例子:
怎样判断日期格式的字段startDate(2016-06-30)是否存在于字符串格式的字段startDateStr(2014-08-05,2016-06-30,2017-04-30)里 ?

我刚开始思路是在sql语句,把startDateStr根据逗号分隔成多个日期格式的数组,再用sql关键字in进行判断,但是对sql的分隔、数组不熟,搞了半天都没有成功,后来直接问同事,他一下子就写出来了...自己果然经验不够啊。没错,是用EXISTS关键字。

SELECT * FROM A a WHERE EXISTS(  SELECT 1 FROM B b WHERE b.startDateStr like '%' || to_char(a.startDate,'yyyy-mm-dd') || '%');

思路也就是类似以下的sql:

SELECT * FROM A a WHERE a.startDate IN (SELECT b.startDateStr FROM b);

Oracle中in和exists的选择:
然后搜索了一些资料,关于Oracle中in和exists的选择,主要是效率的比较。
1.子查询结果集小,用IN
2.外表小,子查询表大,用EXISTS

简单说明:
a表的数据小,b表数据大时用exists。a为外表(也为主表)

SELECT * FROM a  WHERE EXISTS(  SELECT 1 FROM b WHERE a.employee_id=b.employee_id);

b表数据量小(子表)时,用in。

SELECT * FROM a WHERE a.employee_id IN (SELECT b.employee_id FROM b);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值