将 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_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 格式函数的想法。
正在寻找这个?
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 期望的结果
我有一个名为 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 格式函数的想法。
正在寻找这个?
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 期望的结果