我正在使用SQL Developer(3.1.06)从DWHP中提取信息。我想减去时间(hh:mm:ss) - > timecol_3从日期时间开始(dd / mm / yy hh:mm:ss) - > datetime_col4,这样就像 (10/01/15 01:00:00) - (03:00:00)应该显示(09/01/15 22:00:00)。
现在日期时间没有合并,也没有采用上述格式。 (它们是mm / dd / yyyy和hhmmA或hhmmP格式),所以我使用以下语法将它带到(dd / mm / yy hh:mm:ss)格式 - >
to_char(to_date(datecol_1 ||''|| timecol2,'dd / mm / yy hh24:mi:ss'),'dd / mm / yy hh24:mi:ss')as datetime_col4
你能帮忙吗?
答案 0 :(得分:0)
您的数据看起来像是字符串格式(基于粗体文本中的操作):
to_char(to_date(datecol_1 ||'' || timecol2,' dd / mm / yy hh24:mi:ss'),' dd / mm / yy hh24:mi:ss')as datetime_col4
在oracle中,最好使用本机日期类型中的日期,而不是不断地将它们转换为字符数据类型,因此更好地表示datetime_col4:
to_date(datecol_1 || ' ' || timecol2, 'dd/mm/yy hh24:mi:ss') as datetime_col4
现在假设timecol_3也是hh24:mi:ss形式的字符串,其中hh24部分的范围在00到23之间,你可以将timecol_3转换为间隔数据类型(最接近的数据类型oracle对于纯时间数据类型)像这样:
cast('0 '||timecol_3 as interval day to second) timecol3
你需要领先的' 0'当铸造到一个间隔来表示间隔的日期部分时,在这种情况下为零天。
Interval数据类型可以在oracle中本地添加和相互之间以及从日期[时间]数据类型中添加和删除,因此要将最终结果作为日期日期类型(从基本列开始):< / p>
to_date(datecol_1 || ' ' || timecol2, 'dd/mm/yy hh24:mi:ss')
- cast('0 '||timecol_3 as interval day to second) result
您可以使用最终的to_char()将其包装起来以所需格式显示结果,或者更改NLS_DATE_FORMAT会话设置以输出所需格式的所有日期数据类型:
ALTER SESSION NLS_DATE_FORMAT = 'DD/MM/YY HH24:MI:SS';