将Varchar转换为ANY时间格式

时间:2019-04-08 17:12:26

标签: oracle oracle12c cognos cognos-10

我有一个名为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_date的格式为date

示例

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

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

任何帮助将不胜感激。我在这方面碰壁...我习惯了一段时间使用专有代码,对真正的日期时间格式没有太多经验。

更新回答问题

  • Alex Poole,我没有说这个系统是最好的……它是由供应商提供的。 :)
  • BEGIN_TIME始终为4个字符
  • 确实看起来我想得太多了……Littlefoot可能已经把它钉在了头上,但是不幸的是,直到明天我才有机会进行测试。

感谢大家的快速响应。该请求现在结束后,我可能还剩下头发:)

最终思想

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

1 个答案:

答案 0 :(得分:2)

正在寻找吗?

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,并再次使用适当的格式掩码,将返回所需的结果