Oracle SQL - 将 varchar2 转换为日期

Oracle SQL - convert a varchar2 into a date

我在将 varchar2 字段转换为日期格式时遇到问题。 我有 2 列数据类型为 varchar2,一个称为 qtime,另一个称为 ztime。这两个字段都包含这种格式的字符串(f.e。152015 -> 将是时间戳 15:20:15)。

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

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

ORA-01861:"literal does not match format string"

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

2018 年 3 月 1 日

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

01.03.2018 但是 f.e 的正确时间。 15:20:15,0000000

提前致谢,如有任何帮助,我们将不胜感激

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

"The Database contains another column with the correct date for each time"

缺失的一块拼图!连接两列以获得可以转换为 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

首先,如果您尝试将 varchar2 转换为既不指定日期也不指定月份的日期,它将默认为当月的第一天:

If you specify a date value without a date, then the default date is the first day of the current month.

您可以阅读更多内容here

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

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