在Oracle中如何将Varchar2转换为时间?
How to convert Varchar2 to time in Oracle?
我的 table 中有 2 列都是 varchar2。我有一个查询
SELECT MYCOLUMN_TIME||' '||MYCOLUMN_TIME_AMPM
FROM MYTABLE
我得到输出 0910 am。我试过了
SELECT TO_CHAR(TO_DATE(MYCOLUMN_TIME,'hh24miss'), 'hh24:mi:ss')||' '||MYCOLUMN_TIME_AMPM
FROM MYTABLE
通过此查询,我得到输出 09:10:00 pm。
我想要像 21:10:00 pm 这样的输出。我们怎样才能做到这一点?请帮忙
使用 HH24
格式掩码时,21
小时等于 9 PM
。 PM
和 21
没有任何意义,是吗?
当您将与 am/pm 连接的字符串 (0910) 转换为日期时,您使用具有适当格式掩码的 TO_DATE
函数。日期值 - 在 Oracle 中 - 包含日期和时间部分(请参阅以下示例中的 datum_1
)。然后将 TO_CHAR
应用于这样的结果,以便根据需要显示它(同样,通过应用所需的格式掩码) - 即 datum_2
.
例如:
SQL> alter session set nls_date_format = 'dd.mm.yyyy hh:mi pm';
Session altered.
SQL> with mytable (mycolumn_time, mycolumn_time_ampm) as
2 (select '0910', 'am' from dual union all
3 select '1150', 'pm' from dual
4 )
5 select mycolumn_time,
6 mycolumn_time_ampm,
7 to_date(mycolumn_time ||' '||mycolumn_time_ampm, 'hhmi pm') datum_1,
8 --
9 to_char(to_date(mycolumn_time ||' '||mycolumn_time_ampm, 'hhmi pm'), 'hh24:mi') datum_2
10 from mytable;
MYCO MY DATUM_1 DATUM_2
---- -- ------------------- -------
0910 am 01.09.2020 09:10 AM 09:10
1150 pm 01.09.2020 11:50 PM 23:50
SQL>
如果您添加 PM
格式掩码,您将得到
<snip>
9 to_char(to_date(mycolumn_time ||' '||mycolumn_time_ampm, 'hhmi pm'), 'hh24:mi pm') datum_2
10 from mytable; ^^
here
MYCO MY DATUM_1 DATUM_2
---- -- ------------------- --------
0910 am 01.09.2020 09:10 AM 09:10 AM
1150 pm 01.09.2020 11:50 PM 23:50 PM
SQL>
但是 - 正如我之前所说 - 它没有意义。没有例如23:50 AM
,但在 11:50 AM
或 11:50 PM
.
中非常有意义
我的 table 中有 2 列都是 varchar2。我有一个查询
SELECT MYCOLUMN_TIME||' '||MYCOLUMN_TIME_AMPM
FROM MYTABLE
我得到输出 0910 am。我试过了
SELECT TO_CHAR(TO_DATE(MYCOLUMN_TIME,'hh24miss'), 'hh24:mi:ss')||' '||MYCOLUMN_TIME_AMPM
FROM MYTABLE
通过此查询,我得到输出 09:10:00 pm。
我想要像 21:10:00 pm 这样的输出。我们怎样才能做到这一点?请帮忙
使用 HH24
格式掩码时,21
小时等于 9 PM
。 PM
和 21
没有任何意义,是吗?
当您将与 am/pm 连接的字符串 (0910) 转换为日期时,您使用具有适当格式掩码的 TO_DATE
函数。日期值 - 在 Oracle 中 - 包含日期和时间部分(请参阅以下示例中的 datum_1
)。然后将 TO_CHAR
应用于这样的结果,以便根据需要显示它(同样,通过应用所需的格式掩码) - 即 datum_2
.
例如:
SQL> alter session set nls_date_format = 'dd.mm.yyyy hh:mi pm';
Session altered.
SQL> with mytable (mycolumn_time, mycolumn_time_ampm) as
2 (select '0910', 'am' from dual union all
3 select '1150', 'pm' from dual
4 )
5 select mycolumn_time,
6 mycolumn_time_ampm,
7 to_date(mycolumn_time ||' '||mycolumn_time_ampm, 'hhmi pm') datum_1,
8 --
9 to_char(to_date(mycolumn_time ||' '||mycolumn_time_ampm, 'hhmi pm'), 'hh24:mi') datum_2
10 from mytable;
MYCO MY DATUM_1 DATUM_2
---- -- ------------------- -------
0910 am 01.09.2020 09:10 AM 09:10
1150 pm 01.09.2020 11:50 PM 23:50
SQL>
如果您添加 PM
格式掩码,您将得到
<snip>
9 to_char(to_date(mycolumn_time ||' '||mycolumn_time_ampm, 'hhmi pm'), 'hh24:mi pm') datum_2
10 from mytable; ^^
here
MYCO MY DATUM_1 DATUM_2
---- -- ------------------- --------
0910 am 01.09.2020 09:10 AM 09:10 AM
1150 pm 01.09.2020 11:50 PM 23:50 PM
SQL>
但是 - 正如我之前所说 - 它没有意义。没有例如23:50 AM
,但在 11:50 AM
或 11:50 PM
.