【问题标题】:reperesent AM or PM values with time in oracle在 oracle 中随时间重复 AM 或 PM 值
【发布时间】:2015-11-12 05:16:04
【问题描述】:

我有一个包含两个日期列的表:time_from、time_to。两者都有 date 的数据类型。现在,我想连接这些列值,这样我只能得到这样的时间:

9:00 PM-9:50 PM。

现在,我的一些时间是在上午,而其他时间是下午,我想写一个选择语句来连接它们。我写了这个,但它每次都不会返回正确的“AM”或“PM”。

我的查询是:

select 
  to_char(time_from,'HH:MI:SS PM') || ' - ' || to_char(time_to,'HH:MI:SS PM')
from
  table-name

我最初以 12 小时格式插入我的时间。

这里需要一些指导吗?我不想硬编码 AM 或 PM

【问题讨论】:

  • 之前看到过,但对我帮助不大。
  • 以上帖子明确指出需要使用“AM”
  • 你是如何“最初以 12 小时格式插入我的时间”的?

标签: sql oracle date-formatting


【解决方案1】:

现在,我的一些时间在上午,而其他时间在下午

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 小时 格式转换时间元素,无论您为时间元素指定的格式模型如何。

【讨论】:

  • 谢谢..您能否修改“With Data”子句以从我的表中进行选择(示例)。我很困惑我的表名将如何驻留在此选择语句中
【解决方案2】:

根据所需的输出(每小时没有前导零),它应该是这个:

SELECT 
  TO_CHAR(time_from, 'fmHH:')||TO_CHAR(time_from, 'MI PM') || ' - ' ||
  TO_CHAR(to_from, 'fmHH:')||TO_CHAR(to_from, 'MI PM')
FROM table_name;

SELECT 
  REGEXP_REPLACE(TO_CHAR(time_from, 'HH:MI PM'), '^0') || ' - ' ||
  REGEXP_REPLACE(TO_CHAR(to_from,'HH:MI PM'), '^0')
FROM table_name;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 2015-07-07
    • 2012-08-31
    • 2021-03-06
    • 2017-12-27
    • 2022-10-07
    相关资源
    最近更新 更多