2014-10-20 82 views
0

我试图从格式提取小时和分钟不工作

2012/12/01 02:03:44 

我的代码的日期为Extrac小时和分钟看起来像水木清华

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 

但在提取领域我只是得到0。

任何想法我做错了什么?

+0

什么不起作用? – Kermit 2014-10-20 14:15:51

回答

0

尝试:

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 

我假设你正在使用的日期时间格式存储日期和你并不需要将它们转化为时间戳。

UPDATE:如果您有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 

附:在问题中它说:“我试图从格式为 2012/12/01 02:03:44的日期中提取小时和分钟”。如何在不丢失时间信息的情况下将其存储在DATE中?

+0

如果start_date和closed_date具有DATE类型,则无法从它们中提取有关ANSI SQL的时间! – Multisync 2014-10-20 15:14:34

+0

那么这是OP的问题,这就是为什么他会收到所有0,如果他们存储为'DATE',对吧? – AdamMc331 2014-10-20 15:28:31

+0

@ McAdam331我认为这是答案的问题,因为如果start_date和closed_date的日期类型为 – Multisync 2014-10-20 15:30:41

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') - 第一个参数是char所以Oracle转换datetime列 “起始日期” 为char使用会话NLS设置。它可能不同于你的面具'DD-MON-YYYY HH24:MI:SS'