要求输入日期应该产生当月的第一天。 条件是:
答案 0 :(得分:1)
以Tim Biegeleisen的解决方案为基础,简化它并避免日期到文本的最新转换。请注意使用TRUNC
来获取期间的第一个日期。
SELECT
CASE
WHEN EXTRACT(MONTH FROM DATE_COL) = 11 AND EXTRACT(DAY FROM DATE_COL) >= 16
THEN TRUNC(DATE_COL, 'MONTH') + 15
ELSE TRUNC(DATE_COL, 'MONTH')
END AS FIRST_OF_MONTH
FROM T1
答案 1 :(得分:0)
我使用了一个冗长的CASE
表达式来处理这个问题,包含你在问题中提到的三个案例的逻辑。
SELECT CASE WHEN EXTRACT(month FROM date) = 11 AND
EXTRACT(day FROM date) >= 16
THEN TO_DATE(EXTRACT(year FROM date) || '-11-16', 'yyyy-mm-dd')
ELSE TO_DATE(EXTRACT(year FROM date) || '-' || EXTRACT(month FROM date) ||
'-01', 'yyyy-mm-dd')
END AS newDate
FROM yourTable