SELECT TO_DATE(pa.actual_exp_date, 'YYYYMMDD') - TO_DATE('20230531', 'YYYYMMDD')
AS out_days
FROM pre_agrees pa
JOIN pass p ON pa.pre_id = p.pass_id
WHERE pa.prepaid_status = 'A'
AND to_char(pa.actual_exp_date, 'YYYYMMDD') >= '20230531'
AND actual_exp_date IS NOT NULL
AND to_char(p.effective_date, 'YYYYMMDD') <= '20230531';
1条答案
按热度按时间yyyllmsg1#
永远不要在已经是
DATE
数据类型的值上使用TO_DATE
。如果
pre_agrees.actual_exp_date
和pass.effective_date
都是DATE
列,则:actual_exp_date IS NOT NULL
过滤器是不必要的,因为pa.actual_exp_date >= DATE '2023-05-31'
只有在列为NOT NULL
时才为true。*如果
pre_agrees.actual_exp_date
和pass.effective_date
都是VARCHAR2
列,那么(除了将日期存储为字符串是不好的做法之外):