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',它用于几个月。
所以解决方案是在创建日期时连接日期和时间组件,正如其他答案所建议的那样,不过我建议使用单个日期字段,因为它可以存储您需要的信息。
我在将 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',它用于几个月。
所以解决方案是在创建日期时连接日期和时间组件,正如其他答案所建议的那样,不过我建议使用单个日期字段,因为它可以存储您需要的信息。