2016-07-28 75 views
0

在Oracle SQL我已经合并4列(列名前:a_da_td_dd_t)分为2列(名前:a_d_td_d_t),它们各自的格式:YYYY-MMM-DD HH24:MI。我试图找出在a_d_t(开始时间)和d_d_t(结束时间)之间每次观察的时间(天和小时)。日期和时间差的Oracle SQL

我已经试过d_d_t - a_d_tto_date(d_d_t)-to_date(a_d_t),但我还是得到了以下每个:invalid identifier


仅供参考,我使用的代码(合作),合并列是:

to_char(to_date 
(to_char (a_d,'YYYYMMDD') 
    || a_t, 
'YYYYMMDDHH24MI' 
    ), 'YYYY-MM-DD HH24:MI') 
+0

我认为他们是日期,我用来创建2合并列的代码在上面。 –

+0

你必须比这更精确 - 如果你在代码中做了你在帖子中所做的事情,难怪它没有工作。在这篇文章中,你说过你有列名a_d,a_t,但是在代码中你有a_dt和a_time_text。如果你所说的大部分都是真的,那么d_d_t和a_d_t已经是日期了,d_d_t - a_d_t应该可以工作,它不会返回“无效标识符”。这是找到时差的正确方法(以天为单位)。 – mathguy

+0

@mathguy上面编辑的代码更好地匹配我所做的。 –

回答

0

你的输入是字符串,因此必须将其转换为日期。但仅仅说to_date还不够,你还必须给出适当的格式模型。

select to_date(d_d_t, 'yyyy-mm-dd hh24:mi') - to_date(a_d_t, 'yyyy-mm-dd hh24:mi') 
from <...> 

会给你天差。乘以24,你会在几个小时内得到它。

+0

K我试着在同一个查询中创建'a_d_t'和'd_d_t',但它不能将它们识别为标识符。我需要做些什么来解决这个问题? –

+0

您是否正在编写查询,并试图同时获得d_d_t,a_d_t及其区别?或者你只需​​要区别?当然,如果您尝试在第一次创建它们的相同查询中使用别名,那么您将获得“无效标识符”,这是不可能的。 – mathguy

0

考虑到您的输入d_d_t,格式为yyyy-mm-dd的a_dare字符串hh:mi和nls_date_format与此不同,您可以尝试使用以下查询并查看它是否有效。

要找到两个日期之间的持续时间,您必须将日期字符串转换为日期格式。

select col_a, col_b, to_date(col_a,'yyyy-mm-dd hh24:mi:ss')- to_date(col_b,'yyyy-mm-dd hh24:mi:ss')duration 
from x_datedur 

与开始时间和x_datedur与你的表名结束时间,col_b更换col_a

+0

我已经试过这个,它不起作用 –