日期时间的 AM/PM 转换
Posted
技术标签:
【中文标题】日期时间的 AM/PM 转换【英文标题】:AM/PM Conversion For Date Time 【发布时间】: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。感谢您的通知。 【参考方案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。以上是关于日期时间的 AM/PM 转换的主要内容,如果未能解决你的问题,请参考以下文章
SQL - 将 varchar (dd/mm/yyyy hh.mm AM/PM) 转换为日期时间