【问题标题】:AM/PM Conversion For Date Time日期时间的 AM/PM 转换
【发布时间】:2019-08-31 06:22:12
【问题描述】:

我之前有一个非常基本的要求,但现在无法解决。我在数据库中有一个表,它按以下格式存储进出时间:

8/18/2019 8:00:00 AM

所以我想要的是把上面的转换成下面的格式:

8/18/2019 8:00:00 PM

这里没什么复杂的,只是将AM 转换为PM。我尝试了类似的方法,但没有得到确切的结果:

SELECT TO_DATE(TO_CHAR(M.IN_TIME, 'MM/DD/YYYY HH:MI:SS'), 'MM/DD/YYYY HH12:MI:SS PM') IN_TIME FROM Table m
WHERE M.DATE = '31-AUG-2019';

我在这里错过了什么?如果有人指出,将不胜感激。

【问题讨论】:

  • 您的两个示例具有完全相同的格式。你要的不是格式转换,你要加12小时(0.5天)。
  • 是的,正是@William Robertson。感谢您的通知。

标签: sql oracle oracle10g


【解决方案1】:

首先,日期以内部格式存储,因此您无法使用您正在执行的操作更改它。您在数据库中看到的是转换为字符串的日期。(人类可读格式)

您可以尝试以下方法来实现您想要的:

SELECT CASE WHEN TRUNC(IN_TIME) + (12/24) > IN_TIME THEN
IN_TIME + (12/24) 
ELSE IN_TIME END
 AS IN_TIME_CONVERTED
FROM TABLE M
WHERE ....

此查询只会将中午之前的日期转换为下午的等效日期。

干杯!!

【讨论】:

  • 太棒了!谢谢。你能具体说明一下这实际上是如何工作的吗CASE WHEN TRUNC(IN_TIME) + (12/24) > IN_TIME?
  • 这会将 IN_TIME 转换为一天的开始时间,添加 12/24 将使这个时间成为一天的中午 12 点。现在条件会根据它检查这个时间是在中午之前还是中午之后,如果在中午之前,只需添加12小时,使其成为PM。
猜你喜欢
  • 2021-03-19
  • 1970-01-01
  • 1970-01-01
  • 2021-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-29
相关资源
最近更新 更多