sql oracle case when 日期

sql oracle case when date

这是我目前得到的:

select
to_char(sysdate, 'yyyy') Time
from 
dual;

这给了我:

TIME

2015

它一直工作到现在。

我要补充

任何想法如何处理这个?我考虑过 CASE WHEN 但我不知道怎么做。

谢谢!

一个简单的 CASE 表达式就可以完成这项工作。

例如,

SQL> SELECT
  2    '01.07.' ||
  3    CASE
  4      WHEN TO_CHAR(SYSDATE, 'MM') < '07'
  5      THEN 
  6        TO_CHAR(SYSDATE, 'YYYY')
  7      ELSE
  8        TO_CHAR(add_months(SYSDATE,-12), 'YYYY')
  9    END case_date
  10 FROM dual;

CASE_DATE
----------
01.07.2015

SQL>

为了更加精确,您可以将公共值保留在 CASE 表达式之外:

SQL> SELECT '01.07.'
  2    ||
  3    CASE
  4      WHEN TO_CHAR(SYSDATE, 'MM') < '07'
  5      THEN TO_CHAR(SYSDATE, 'YYYY')
  6      ELSE TO_CHAR(add_months(SYSDATE,-12), 'YYYY')
  7    END case_date
  8  FROM dual;

CASE_DATE
----------
01.07.2015

SQL>

使用 extract 更具可读性

SELECT
 to_date((CASE
             WHEN extract(MONTH FROM SYSDATE) >= 7 THEN
              0
             ELSE
              -1
         END) + extract(YEAR FROM SYSDATE) || '07-01', 'yyyy-mm-dd') END
  FROM dual