sql oracle case when 日期
sql oracle case when date
这是我目前得到的:
select
to_char(sysdate, 'yyyy') Time
from
dual;
这给了我:
TIME
2015
它一直工作到现在。
我要补充
- 如果月份是
>= 7
我得到输出 01.07.current year
- 如果月份是
<= 7
我得到输出 01.07.(current year - 1 year)
任何想法如何处理这个?我考虑过 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
这是我目前得到的:
select
to_char(sysdate, 'yyyy') Time
from
dual;
这给了我:
TIME
2015
它一直工作到现在。
我要补充
- 如果月份是
>= 7
我得到输出01.07.current year
- 如果月份是
<= 7
我得到输出01.07.(current year - 1 year)
任何想法如何处理这个?我考虑过 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