目前有一個專案要清整會員的生日資料,針對有異常的會員回壓長官指示的邏輯,過程中SQL產生錯誤,主要想針對這個錯誤發生的原因進一步了解。狀況說明如下。
圖1的SQL可以正常運作,但少去where內同一個欄位的條件,就會出現錯誤如圖2,後續做了圖3的測試,推測應該是資料內有異常,但想了解什麼情境有可能出現這種狀況。
只想知道這種狀況有可能發生的情境,以及背後資料可能存在的問題,再麻煩好心大神解惑,感激!
圖1 SQL
select member_id ::text, c_birth ::text,
case when to_char(to_timestamp(c_birth,'yyyymmdd'),'mm') = substr(c_birth,5,2) then to_timestamp(c_birth,'yyyymmdd')
else to_timestamp(substr(c_birth,1,6)::text||'01','yyyymmdd') + INTERVAL '1 MONTH - 1 day' end c_birth
from abcde.tb_cust_plus_member
where c_birth=c_birth
limit 10
圖1
圖2 SQL
select member_id ::text, c_birth ::text,
case when to_char(to_timestamp(c_birth,'yyyymmdd'),'mm') = substr(c_birth,5,2) then to_timestamp(c_birth,'yyyymmdd')
else to_timestamp(substr(c_birth,1,6)::text||'01','yyyymmdd') + INTERVAL '1 MONTH - 1 day' end c_birth
from abcde.tb_cust_plus_member
--where c_birth=c_birth
limit 10
圖2
圖3 SQL
select
member_id ,
case when to_char(to_timestamp(c_birth,'yyyymmdd'),'mm') = substr(c_birth,5,2) then to_timestamp(c_birth,'yyyymmdd')
else to_timestamp(substr(c_birth,1,6)||'01','yyyymmdd') + INTERVAL '1 MONTH - 1 day' end c_birth
from
(
select '20180000'::text c_birth , '1001541' member_id
)
圖3