现在,我的一些时间在上午,而其他时间在下午
DATE 不会以您看到的方式存储在数据库中。您所看到的仅用于显示目的,以便我们进行解释。 Oracle 以 7 字节 的内部格式存储日期,这是它的专有格式。
但它不会每次都正确返回“AM”或“PM”
您需要验证您的数据,因为 TO_CHAR 不会操纵数据。它将以您的所需格式显示日期时间。
它只取决于你表中的DATE值,与TO_CHAR中的格式模型AM/PM无关。 p>
-- setting nls_date_format only for the DATE value display
SQL> alter session set nls_date_format='MM/DD/YYYY HH:MI:SS PM';
Session altered.
PM 格式:
SQL> WITH DATA AS
2 ( SELECT SYSDATE - 4/24 from_date, SYSDATE + 4/24 to_date FROM dual
3 )
4 SELECT from_date,
5 to_date,
6 TO_CHAR(from_date, 'HH:MI PM')
7 ||' - '
8 ||TO_CHAR(to_date, 'HH:MI PM') my_tm_format
9 FROM DATA;
FROM_DATE TO_DATE MY_TM_FORMAT
---------------------- ---------------------- -------------------
11/12/2015 07:39:05 AM 11/12/2015 03:39:05 PM 07:39 AM - 03:39 PM
AM 格式:
SQL> WITH DATA AS
2 ( SELECT SYSDATE - 4/24 from_date, SYSDATE + 4/24 to_date FROM dual
3 )
4 SELECT from_date,
5 to_date,
6 TO_CHAR(from_date, 'HH:MI AM')
7 ||' - '
8 ||TO_CHAR(to_date, 'HH:MI AM') my_tm_format
9 FROM DATA;
FROM_DATE TO_DATE MY_TM_FORMAT
---------------------- ---------------------- -------------------
11/12/2015 07:39:14 AM 11/12/2015 03:39:14 PM 07:39 AM - 03:39 PM
注意:
WITH 子句仅用于创建示例数据以进行演示。对您的表使用以下查询,这与您当前使用的相同。关键是您需要验证您的数据,因为 TO_CHAR 不会操纵数据。
SELECT from_date,
to_date,
TO_CHAR(from_date, 'HH:MI PM')
||' - '
||TO_CHAR(to_date, 'HH:MI PM') my_tm_format
FROM your_table;
TO_CHAR 能够以 12 小时 格式转换时间元素,无论您为时间元素指定的格式模型如何。