将 Varchar 转换为任何时间格式

Convert Varchar to ANY time format

我有一个名为 begin_time 的 varchar 列,它将 24 小时时间存储为没有时间格式的 varchar,即 1330

我需要将此 varchar 转换为可用的时间戳、日期时间等,以便我可以轻松地将 varchar 转换为标准时间格式 (1:30 PM)

结束格式类型无关紧要只要我可以将varchar转换成我可以操作为标准格式的格式即可。

我已经尝试研究 Cognos-specific format tricks(这些函数适用于 Metric Designer,而我使用的是 Report Studio)但无济于事。我在寻找特定于 oracle 的技巧时发现的方法对于我需要的东西来说似乎过于复杂(使用非常长的正则表达式规则)。

如果我需要涉及日期,我可以使用列 start_date 并附加 varchar 时间。 注: start_datedate格式

例子

select 
to_date('08/27/2018','MM/DD/YYYY') as start_date
, '1300' as begin_time
from dual

我最终需要的只是能够将时间输出为1:00 PM

如有任何帮助,我们将不胜感激。我在这件事上撞墙了……我习惯了使用专有代码一段时间,对真正的日期时间格式没有太多经验。

更新回答问题

感谢大家的快速回复。当这个请求现在结束时,我可能还剩下头发:)

最后的想法

我从中吸取的教训很简单:如果您正在处理时间格式,请不要放弃使用 Date 格式函数的想法。

正在寻找这个?

SQL> with test (col) as
  2    (select '1330' from dual)
  3  select to_char(to_date(col, 'hh24mi'), 'hh:mi am') result
  4  from test;

RESULT
--------
01:30 PM

SQL>

它有什么作用?

  • TO_DATE 将您拥有的字符串(例如 1330)转换为有效的 DATE 值。默认情况下,它将是截断到当月第一天的日期值:

    SQL> alter session set nls_Date_format = 'dd.mm.yyyy hh24:Mi';
    
    Session altered.
    
    SQL> select to_date('1330', 'hh24mi') res1 from dual;
    
    RES1
    ----------------
    01.04.2019 13:30
    
    SQL>
    
  • 对其应用 TO_CHAR,再次使用适当的格式掩码,returns 期望的结果