日期时sql oracle案例

时间:2015-04-16 13:15:22

标签: sql oracle date case

这是我到目前为止所得到的:

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

这给了我:

TIME

2015

它一直工作到这一点。

我想添加

  • 如果月份为>= 7,我会将其作为输出01.07.current year
  • 如果月份为<= 7,我会将其作为输出01.07.(current year - 1 year)

任何想法如何处理?我想过CASE WHEN,但我不知道如何。

谢谢!

2 个答案:

答案 0 :(得分:2)

一个简单的 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>

答案 1 :(得分:1)

使用提取更具可读性

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