如何从 SQL 中的纪元转换中删除时间部分

问题描述 投票:0回答:1

我正在尝试利用从纪元时间到人类可读形式的转换的时间部分。这是当前数据输出的样子:

票号 已创建 完成
14111487 2/1/2023 凌晨 1:36 2/15/2023 早上 6:00
14116522 2/1/2023 晚上 11:18 2/15/2023 早上 6:00
14116477 2/1/2023 晚上 11:23 2/17/2023 晚上 9:25
14116425 2/1/2023 晚上 10:47 2/15/2023 下午 5:05

这就是我想要的样子:

票号 已创建 完成
14111487 2/1/2023 2/15/2023
14116522 2/1/2023 2/15/2023
14116477 2/1/2023 2/17/2023
14116425 2/1/2023 2/15/2023

我到底如何摆脱查询中的时间,我不需要它。这是我正在使用的查询的相关部分:

SELECT
TICKET.TICK_NUM AS "Ticket Number",
TO_DATE('19700101', 'YYYYMMDD') + (DATECREATED / 86400) AS "Created", 
TO_DATE('19700101', 'YYYYMMDD') + (FIXEDTIME / 86400) AS "Completed"
FROM TICKET
WHERE 
TICKET.DATECREATED BETWEEN 1675209600 and 1677196800;

我正在使用 Oracle Developer 21.4.3

sql oracle epoch to-date
1个回答
0
投票

如果您想将时间组件设置为午夜,请在添加日期之前使用

FLOOR
TRUNC
将数字向下舍入为一整天:

SELECT TICKET.TICK_NUM AS "Ticket Number",
       DATE '1970-01-01' + FLOOR(DATECREATED / 86400) AS "Created", 
       DATE '1970-01-01' + FLOOR(FIXEDTIME / 86400) AS "Completed"
FROM   TICKET
WHERE  TICKET.DATECREATED BETWEEN 1675209600 and 1677196800;
SELECT TICKET.TICK_NUM AS "Ticket Number",
       DATE '1970-01-01' + TRUNC(DATECREATED / 86400) AS "Created", 
       DATE '1970-01-01' + TRUNC(FIXEDTIME / 86400) AS "Completed"
FROM   TICKET
WHERE  TICKET.DATECREATED BETWEEN 1675209600 and 1677196800;

或者

TRUNC
在添加纪元时间后设置日期:

SELECT TICKET.TICK_NUM AS "Ticket Number",
       TRUNC(DATE '1970-01-01' + DATECREATED / 86400) AS "Created", 
       TRUNC(DATE '1970-01-01' + FIXEDTIME / 86400) AS "Completed"
FROM   TICKET
WHERE  TICKET.DATECREATED BETWEEN 1675209600 and 1677196800;

或者,如果您只想将其格式化为日期字符串以在没有时间组件的情况下显示它,请使用

TO_CHAR

SELECT TICKET.TICK_NUM AS "Ticket Number",
       TO_CHAR(DATE '1970-01-01' + DATECREATED / 86400, 'YYYY-MM-DD') AS "Created", 
       TO_CHAR(DATE '1970-01-01' + FIXEDTIME / 86400, 'YYYY-MM-DD') AS "Completed"
FROM   TICKET
WHERE  TICKET.DATECREATED BETWEEN 1675209600 and 1677196800;
© www.soinside.com 2019 - 2024. All rights reserved.