需求是输入日期应该产生月的第一天。 Condtions是:Oracle SQL获取月的第一天
- 如果输入的日期是30年11月16-NOV之间,然后在第一天将是16至11月
- 如果输入的日期在1-nov到15-nov之间,那么第一天将是01-nov。
- 其他月份应该返回相应月份的第01天。
需求是输入日期应该产生月的第一天。 Condtions是:Oracle SQL获取月的第一天
我用了一个冗长的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
以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
谢谢。按我的需要工作。 –
其实你可以跳过第二个'WHEN'条件,因为“所有其他应返回本月1日”意味着“当1月之间,以11月15日则月1日” –
@WernfriedDomscheit尼斯的观察,我已更新我的查询。 –
@Tim感谢您的超级快速响应..按我的需要工作。 –