如何首先将下一个可用年份添加到以下日期格式中。例如,如果日期是7月,今天是6月,那么它将是2023年。但是,如果日期是1月,今天是6月,那么它将是2024年,因为1月已经过去了。日期是在一个非常奇怪的格式DD-MON和系统,我需要上传不会采取这种格式,并要求正确的年份取决于日期。
DD-MON
Select '07-Jul' From sys.dual Select '08-Oct' From sys.dual
预期结果为2023年7月7日和2024年8月10日。我正在使用Oracle SQL
tzcvj98z1#
使用TO_DATE、CASE表达式和ADD_MONTHS:
TO_DATE
CASE
ADD_MONTHS
SELECT CASE WHEN TO_DATE('07-Jul', 'DD-Mon', 'NLS_DATE_LANGUAGE=English') >= SYSDATE THEN TO_DATE('07-Jul', 'DD-Mon', 'NLS_DATE_LANGUAGE=English') ELSE ADD_MONTHS( TO_DATE('07-Jul', 'DD-Mon', 'NLS_DATE_LANGUAGE=English'), 12 ) END FROM dual
如果你想输出一个格式化的字符串(而不是DATE,这是一个二进制数据类型,没有格式),那么你可以把它 Package 在TO_CHAR中:
DATE
TO_CHAR
SELECT TO_CHAR( CASE WHEN TO_DATE('07-Jul', 'DD-Mon', 'NLS_DATE_LANGUAGE=English') >= SYSDATE THEN TO_DATE('07-Jul', 'DD-Mon', 'NLS_DATE_LANGUAGE=English') ELSE ADD_MONTHS( TO_DATE('07-Jul', 'DD-Mon', 'NLS_DATE_LANGUAGE=English'), 12 ) END, 'DD-MM-YYYY' ) FROM dual
1条答案
按热度按时间tzcvj98z1#
使用
TO_DATE
、CASE
表达式和ADD_MONTHS
:如果你想输出一个格式化的字符串(而不是
DATE
,这是一个二进制数据类型,没有格式),那么你可以把它 Package 在TO_CHAR
中: