我正在尝试将EPOCH转换为人类日期。
这导致我检查其他基本SQL以了解它们是如何返回的,
select sysdate from dual = 12-OCT-2015
它错过了时间?
SELECT TO_CHAR(TO_DATE('2015/05/15 8:30:25', 'YYYY/MM/DD HH:MI:SS'))
FROM dual;
= 15-MAY-15
又错过了时间吗?
SELECT TO_DATE('2015/05/15 8:30:25', 'YYYY/MM/DD HH:MI:SS')
FROM dual;
= 15-MAY-15
没有TO_CHAR,仍然缺少时间。
然后是我的EPOCH SQL,
SELECT TO_DATE('01/01/1970 00:00:00','DD/MM/YYYY HH24:MI:SS')+(1325289600000/60/60/24) AS EPOCH FROM dual;
这应该返回:星期六,2011年12月31日00:00:00 GMT但它返回: 04-OCT-30
再次,TIME缺失。
SERVER在EST上,所以时间超过5小时 Oracle Server 11g 使用SQL DEveloper 4.0.2.15
感谢您的帮助, 本
答案 0 :(得分:2)
Mask也应该在TO_CHAR函数中输出时间。
SELECT TO_CHAR(TO_DATE('2015/05/15 8:30:25', 'YYYY/MM/DD HH:MI:SS'), 'YYYY/MM/DD HH:MI:SS')
FROM dual;
但它将是字符串。如果你想对这个日期做一些事情(添加一些东西等),你应该把TO_CHAR放在最后(首先用日期做所有事情,然后用掩码放TO_CHAR)
答案 1 :(得分:2)
它错过了时间?
不,它就在那里,你只是没有展示它。或者您的客户端特定于区域设置的NLS设置未正确设置为显示时间部分。
日期始终包含日期和时间部分,由Oracle以7字节专有格式在内部存储。
在个人SQL级别,要以所需格式显示日期,请始终使用 TO_DATE 以及正确的 FORMAT MODEL 。
例如,
会话级
SQL> alter session set nls_date_format='YYYY-MM-DD';
Session altered.
SQL> SELECT SYSDATE FROM DUAL;
SYSDATE
----------
2015-10-12
SQL> alter session set nls_date_format='YYYY-MM-DD HH24:MI:SS';
Session altered.
SQL> SELECT SYSDATE FROM DUAL;
SYSDATE
-------------------
2015-10-12 17:08:18
个人SQL级别将覆盖会话和客户端的NLS设置:
SQL> SELECT TO_CHAR(SYSDATE, 'YYYY/MM/DD HH24:MI:SS') FROM DUAL;
TO_CHAR(SYSDATE,'YY
-------------------
2015/10/12 17:09:58
答案 2 :(得分:0)
它返回正确的值,但SQL开发人员未设置为正确显示它。
来自this answer:
您可以在偏好设置中更改此内容:
- 从Oracle SQL Developer的菜单转到:工具>偏好。
- 从“首选项”对话框中,选择“数据库”>左侧面板中的NLS。
- 从NLS参数列表中,在日期格式字段中输入
DD-MON-RR HH24:MI:SS
。- 保存并关闭对话框,完成!
醇>
(我更喜欢ISO标准格式YYYY-MM-DD HH24:MI:SS
,但无论您喜欢哪种格式都可以使用。)
然后,如果你这样做:
SELECT TO_DATE('01/01/1970 00:00:00','DD/MM/YYYY HH24:MI:SS')
+(1325289600000/60/60/24) AS EPOCH
FROM dual;
DD-MON-RR HH24:MI:SS
格式的输出将为:
EPOCH
------------------
04-OCT-30 00:00:00
,YYYY-MM-DD HH24:MI:SS
的输出为:
EPOCH
-------------------
4030-10-04 00:00:00
答案 3 :(得分:0)
您的纪元包含毫秒,您需要将其除以1000:
SELECT TO_DATE('01/01/1970 00:00:00','DD/MM/YYYY HH24:MI:SS')
+(1325289600000/1000/60/60/24) AS EPOCH
FROM dual;