【问题标题】:sql oracle case when datesql oracle大小写日期
【发布时间】:2015-06-22 22:14:49
【问题描述】:

这是我目前得到的:

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

这给了我:

TIME

2015

它一直工作到现在。

我想补充

  • 如果月份是>= 7,我得到输出01.07.current year
  • 如果月份是<= 7,我得到输出01.07.(current year - 1 year)

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

谢谢!

【问题讨论】:

    标签: sql oracle date case


    【解决方案1】:

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

    【讨论】:

    • 谢谢!这对我帮助很大!完美
    • @Okdel 感谢您提出修改建议。由于解释部分丢失了内容,我必须自己改进它。因此,我接受了您的修改并对其进行了改进。
    【解决方案2】:

    使用提取更易读

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-19
      • 1970-01-01
      相关资源
      最近更新 更多