oracle exists判斷一個日期格式的字段是否存在逗號拼接的字符串日期裏

例子:
怎樣判斷日期格式的字段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);


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章