2014-10-20 2 views
0

Я пытаюсь Extrac час и минуту с даты форматаExtract час и минуту не работает

2012/12/01 02:03:44 

мой код выглядит как

SELECT to_char(t.start_date, 'DD-MON-YY HH24:MI:SS')        AS Start_DATE, 
     to_char(t.resolved_date, 'DD-MON-YY HH24:MI:SS')       AS Closed_DATE, 
     extract(MINUTE FROM TO_TIMESTAMP(t.start_date, 'YYYY/MON/DD HH24:MI:SS')) AS Start_DATE_min, 
     extract(MINUTE FROM TO_TIMESTAMP(t.closed_date, 'YYYY/MON/DD HH24:MI:SS')) AS Closed_DATE_min, 
     extract(HOUR FROM TO_TIMESTAMP(t.start_date, 'DD-MON-YYYY HH24:MI:SS')) AS Start_DATE_h, 
     extract(HOUR FROM TO_TIMESTAMP(t.closed_date, 'DD-MON-YYYY HH24:MI:SS')) AS Closed_DATE_h 
FROM t 

Но в полях выписки я просто получите 0s.

Любая идея, что я делаю неправильно?

+0

Что не работает? – Kermit

ответ

0

Try:

SELECT to_char(t.start_date, 'DD-MON-YY HH24:MI:SS')    AS Start_DATE, 
     to_char(t.resolved_date, 'DD-MON-YY HH24:MI:SS')    AS Closed_DATE, 
     extract(MINUTE FROM t.start_date ) AS Start_DATE_min, 
     extract(MINUTE FROM t.closed_date) AS Closed_DATE_min, 
     extract(HOUR FROM t.start_date ) AS Start_DATE_h, 
     extract(HOUR FROM t.closed_date) AS Closed_DATE_h 
FROM t 

Я предполагаю, что вы сохраняете Даты в формате DATETIME и вам не нужно, чтобы преобразовать их в метку времени.

ОБНОВЛЕНИЕ: Если у вас есть тип DATE, нет смысла извлекать информацию минут и часов из типа, который не имеет этой информации. Это объясняет, почему вы читаете нули Измените тип данных на DATETIME. Это похоже на извлечение десятичных знаков из INTEGER. Или просто поставить нули и сохранить CPU:

SELECT to_char(t.start_date, 'DD-MON-YY HH24:MI:SS')    AS Start_DATE, 
     to_char(t.resolved_date, 'DD-MON-YY HH24:MI:SS')    AS Closed_DATE, 
     0 AS Start_DATE_min, 
     0 AS Closed_DATE_min, 
     0 AS Start_DATE_h, 
     0 AS Closed_DATE_h 
FROM t 

P.S. В вопросе говорится: «Я пытаюсь выдать час и минуту с даты формата 2012/12/01 02:03:44». Как вы можете сохранить это в DATE, не теряя информацию о времени?

+0

, если start_date и closed_date имеют тип DATE, вы не можете извлечь время из них в отношении ANSI SQL! – Multisync

+0

Хорошо, тогда это проблема OP, поэтому он получит все 0s, если они хранятся как 'DATE', правильно? – AdamMc331

+0

@ McAdam331 Я думаю, что это проблема ответа, потому что он даже не будет запущен, если start_date и closed_date имеют тип DATE – Multisync

2
SELECT to_char(t.start_date, 'DD-MON-YY HH24:MI:SS')        AS Start_DATE, 
     to_char(t.resolved_date, 'DD-MON-YY HH24:MI:SS')       as closed_date, 
     extract(minute from cast(t.start_date as timestamp)) as start_date_min, 
     extract(MINUTE FROM cast(t.closed_date as timestamp)) AS Closed_DATE_min, 
     extract(HOUR FROM cast(t.start_date as timestamp)) AS Start_DATE_h, 
     extract(HOUR FROM cast(t.closed_date as timestamp)) AS Closed_DATE_h 
FROM t 



SELECT to_char(t.start_date, 'DD-MON-YY HH24:MI:SS')        AS Start_DATE, 
     to_char(t.resolved_date, 'DD-MON-YY HH24:MI:SS')       as closed_date, 
     to_char(t.start_date, 'MI') as start_date_min, 
     to_char(t.closed_date, 'MI') as closed_date_min, 
     to_char(t.start_date, 'HH24') as start_date_h, 
     to_char(t.closed_date, 'HH24') AS Closed_DATE_h 
FROM t 

Проблема с кодом:
TO_TIMESTAMP (t.start_date, 'DD-MON-YYYY HH24: MI: SS') - первый аргумент символ так Oracle преобразует даты и времени столбец "start_date" на символ используя настройки сеанса NLS. Он может отличаться от вашей маски «DD-MON-YYYY HH24: MI: SS»

Смежные вопросы