在Oracle中格式化日期以显示月和日

时间:2018-04-27 03:55:14

标签: sql oracle datetime date-format

我的日期如下

SELECT TO_CHAR(SYSDATE, 'DDD') FROM dual;

以上查询的结果为:117

我需要将此 117 转换为月和日。任何人都知道如何在PL SQL中执行此操作

预期结果为04-27

2 个答案:

答案 0 :(得分:2)

'DDD'更改为'MM-DD'

试试这个:

SELECT TO_CHAR(SYSDATE, 'MM-DD') 
FROM dual;

<强>输出:

04-27

<强>演示:

  

http://sqlfiddle.com/#!4/622055/7

<强>编辑:

DDD显示一年中第一天的天数。

例如:

SELECT TO_CHAR(TO_DATE('2018-01-01','YYYY-MM-DD'), 'DDD') 
FROM dual;

提供输出001,因为它是一年中的第一天2018

所以要打破117你需要一年。 然后你可以使用这个查询。

SELECT TO_CHAR(TO_DATE('2018-01-01','YYYY-MM-DD') + column_name - 1, 'MM-DD') 
FROM dual;

示例查询:

SELECT TO_CHAR(TO_DATE('2018-01-01','YYYY-MM-DD') + 117 - 1, 'MM-DD')
FROM dual;

<强>输出:

04-27

<强>演示:

  

http://sqlfiddle.com/#!4/622055/37

答案 1 :(得分:0)

如果您有“117”并希望将其转换为日期,则必须使用一点(但实际上只是一点点)算术。由于'DDD'表示自当年第1年以来的天数,因此将其添加到... 当年的第1天并应用适当的格式掩码将其转换为日期。我想删除昨天,我减去“1”。

例如:

SQL> select to_char(sysdate, 'ddd') from dual;

TO_
---
117

SQL> select to_date(trunc(sysdate, 'yyyy') + 117, 'dd.mm.rrrr') - 1 resul
  2  from dual;

RESULT
----------
27.04.2018

SQL>

或者,使用您指定的格式(MM-DD):

SQL> select to_char(trunc(sysdate, 'yyyy') + 117 - 1, 'mm-dd') result
  2  from dual;

RESUL
-----
04-27

SQL>