oracle 如何从DD-MON日期格式获取下一个可用年份,并将其转换为DD-MM-YYYY格式?

goqiplq2  于 2023-06-29  发布在  Oracle
关注(0)|答案(1)|浏览(110)

如何首先将下一个可用年份添加到以下日期格式中。例如,如果日期是7月,今天是6月,那么它将是2023年。但是,如果日期是1月,今天是6月,那么它将是2024年,因为1月已经过去了。日期是在一个非常奇怪的格式DD-MON和系统,我需要上传不会采取这种格式,并要求正确的年份取决于日期。

Select '07-Jul'
From sys.dual

Select '08-Oct'
From sys.dual

预期结果为2023年7月7日和2024年8月10日。
我正在使用Oracle SQL

tzcvj98z

tzcvj98z1#

使用TO_DATECASE表达式和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中:

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

相关问题