Oracle SQL - 将varchar2转换为日期

时间:2018-03-19 11:42:13

标签: sql oracle date-arithmetic

将varchar2字段转换为日期格式时遇到问题。 我使用datatyp varchar2获得了2列,一个称为qtime,另一个称为ztime。这两个字段都包含此格式的字符串(f.e. 152015 - >将是时间戳15:20:15)。

出于报告原因,我需要将这些字段转换为日期格式,之后我想减去(qtime-ztime)字段并将它们转换为[hh]格式(操作01:20:00之后的fe将是 - > 01)。是否可以在Oracle SQL 12c中使用它? 我现在面临的最大问题是我没有将这些字符串转换为日期格式。

select TO_DATE(qtime,'MM/DD/YYYY hh24:mi:ss')只是给了我

  

ORA-01861:“文字与格式字符串不匹配”

select TO_DATE(qtime,'hh24mmss')给了我错误的日期

2018年3月1日

select TO_TIMESTAMP(qtime,'hh24mmss')给了我错误的日期

01.03.2018 但是正确的时间与f.e.的十五点20分十五秒下,0000000

提前感谢您,任何帮助表示赞赏

注意:我只对数据库Oracle 12c有读取权限,所以我需要在语句中使用

2 个答案:

答案 0 :(得分:5)

  

“数据库包含另一列,每次都有正确的日期”

拼图的缺失部分!连接两列以获得可以转换为Oracle DATE的内容:

select to_date(qdate||qtime, 'yyyymmddhh24miss') as qdatetime
       , to_date(zdate||ztime, 'yyyymmddhh24miss') as zdatetime
from your_table

完成后,您可以执行日期算术,例如

select id
       , zdatetime - qdatetime as time_diff
from (  select id
               , to_date(qdate||qtime, 'yyyymmddhh24miss') as qdatetime
               , to_date(zdate||ztime, 'yyyymmddhh24miss') as zdatetime
      from your_table
)

如果您想要差异的小时数,可以在外部查询的投影中包含此表达式:

, extract( hour from (zdatetime - qdatetime) day to second) as hrs_ela

答案 1 :(得分:0)

首先,如果您尝试将varchar2转换为日期而未指定日期和月份,则默认为当月的第一天:

  

如果您指定的日期值没有日期,则默认日期是当月的第一天。

您可以阅读更多here

同样在你的第二和第三个例子中,你正在使用' hh24mmss'用于指定小时,分钟和秒组件,但请注意,分钟的正确格式为' mi' ,而不是' mm',用于数月。

因此,解决方案是在创建日期时将日期和时间组件连接起来,如同建议的其他答案一样,我建议使用单个日期字段,因为它可以存储您需要的信息。