0

我有一个将日期表示为的字符字段'01-JAN-13'。当我重新格式化时TO_DATE(SUBSTR(DSIS_CC_MASTER.created_ts, 1, 9),'YYYY-MM-DD'),我得到的结果为13-JAN-01.

如何获取格式的数据YY-MM-DD。我需要写一个案例来将月份更改为数字吗?

SELECT dsis_cc_master.created_ts
     , to_date(substr(dsis_cc_master.created_ts, 1, 9), 'YYYY-MM-DD') AS created_month
  FROM traffic_eng.dsis_cc_master
 WHERE dsis_cc_master.created_ts >= to_date('2013-01-01', 'yyyy-mm-dd')

我的结果是

01-JAN-13    13-JAN-01

我正在尝试获取01-01-1313-01-01进入第二列。

4

2 回答 2

1

您必须使用日期格式模型和TO_CHAR函数来获得所需格式的结果:

select DSIS_CC_MASTER.created_ts, TO_CHAR(TO_DATE(SUBSTR(DSIS_CC_MASTER.created_ts, 1, 9),'YYYY-MM-DD'), 'DD-MM-YY') as created_month FROM TRAFFIC_ENG.DSIS_CC_MASTER
WHERE DSIS_CC_MASTER.created_ts >= to_date('2013-01-01', 'yyyy-mm-dd')

由于列中的数据已经以YYYY-MM-DD格式存储,因此您实际上可以substr(DSIS_CC_MASTER.created_ts, 3, 7)得到所需的内容。

于 2013-11-11T18:14:45.050 回答
1

您正在取回一个日期值,该值会显示,但客户端配置为显示日期。如果要显式设置格式to_char,请改为返回字符串:

select 
    DSIS_CC_MASTER.created_ts, 
    TO_CHAR(TO_DATE(SUBSTR(DSIS_CC_MASTER.created_ts, 1, 9),'YYYY-MM-DD'),'DD-MM-YY') as created_month 
FROM TRAFFIC_ENG.DSIS_CC_MASTER
WHERE DSIS_CC_MASTER.created_ts >= to_date('2013-01-01', 'yyyy-mm-dd')

但是,如果此查询的使用者期望返回日期类型(例如进行日期数学运算),您正在更改返回类型,这可能会导致问题。

于 2013-11-11T18:17:16.070 回答