【发布时间】:2023-03-27 03:37:01
【问题描述】:
我的会计年度从 5 月 1 日开始,到 4 月 30 日结束。我正在尝试使用 CASE 语句返回会计年度的开始日期。
即
CAST(
CASE
WHEN TO_NUMBER (TO_CHAR (GET_DATE, 'MM')) IN (11,
12,
5,
6,
7,
8,
9,
10)
THEN
'05/01/'
|| TO_NUMBER (TO_CHAR (TRUNC (get_date, 'year'), 'YYYY'))
WHEN TO_NUMBER (TO_CHAR (GET_DATE, 'MM')) IN (1,
2,
3,
4)
THEN
'05/01/'
|| TO_NUMBER (TO_CHAR (TRUNC (get_date, 'year'), 'YYYY') - 1)
END AS DATE)
当我使用演员表时,我得到“无效月份”,但当我取消它时,它默认为数字。无论哪种方式,我都没有得到我想要的结果。
【问题讨论】:
-
ADD_MONTHS(TRUNC(ADD_MONTHS(GET_DATE, -4), 'YYYY'), 4)也应该这样做 -
您不能真正将字符串转换为日期。如果字符串恰好在会话的当前
nls_date_format中,您几乎可以摆脱它,但最好使用带有显式格式掩码的to_date(或以其他方式解决问题,这样您就不必这样做了) . -
@WernfriedDomscheit 谢谢,效果很好!但是,如果您不介意,对于结束日期(试图获得 4/30/'next_year'),我将获得与开始日期相同的年份:(