TO_DATE Oracle中的转换问题?

时间:2012-05-04 07:19:40

标签: oracle

 SELECT TO_DATE (   TO_CHAR (EXTRACT (MONTH FROM schedule.start_date))
                || '-'
                || TO_CHAR (EXTRACT (DAY FROM schedule.start_date))
                || '-'
                || TO_CHAR (EXTRACT (YEAR FROM schedule.start_date))
                || ' '
                || TO_CHAR (schedule.start_time_hour)
                || ':'
                || TO_CHAR (schedule.start_time_minutes)
                || schedule.start_time_am_pm,
                'DD-MM-YYYY HH24:MI pm'
                )
   FROM table1 schedule;

table1中,start_date字段值包含14-Apr-12 12:00:00 AM的日期,start_time_hour的值为hourstart_time_minutes的值为{{} 1}},minutes的值为start_time_am_pm。我想将这些列合并为一个字符串。我将转换为AM or PM之类的日期格式。但它会引发错误to_date('14-04-12 05:08 PM','DD-MM-YYYY HH:MI PM')。这有什么问题..任何帮助我如何根据我的上述要求转换为日期格式。

2 个答案:

答案 0 :(得分:0)

Select to_char(schedule.start_date,  'DD-MM-YYYY HH:MI AM') 
from table1 schedule;

如果schedule.start_date在00:00被截断,并且你在start_time_hour和start_time_minutes列中有时间信息(设计不好 - 你不需要这些列,DATE类型本身有时间。)你可以这样做:

Select 
  to_char(schedule.start_date + start_time_hour/24 + start_time_minutes/1440
          ,'DD-MM-YYYY HH:MI AM') 
from table1 schedule;

答案 1 :(得分:0)

好吧,我认为您的问题[更不用说其他评论]是您将MONTH(字符串)放入MM(数字)。 即EXTRACT(来自schedule.start_date的月份),因此“MONTH”是列中的第一个日期项目,但格式掩码“DD”是第一个项目。