0

我正在尝试将 EPOCH 转换为 HUMAN DATETIME。

  • 当我在他们的网站上对此进行测试时,它会返回正确的值。
  • 当我在 SQL Developer 中执行此操作时,这是错误的。

这导致我检查其他基本 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 上,因此使用 SQL DEveloper 4.0.2.15 的 Oracle Server 11g 超时 5 小时

感谢您的帮助,本

4

4 回答 4

2

掩码也应该在 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 用掩码)

于 2015-10-12T11:20:15.173 回答
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
于 2015-10-12T11:41:35.430 回答
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;
于 2015-10-12T11:43:49.247 回答
0

它返回正确的值,但 SQL 开发人员未设置为正确显示它。

这个答案

您可以在首选项中更改此设置:

  1. 从 Oracle SQL Developer 的菜单转到:工具 > 首选项。
  2. 在 Preferences 对话框中,从左侧面板中选择 Database > NLS。
  3. 从 NLS 参数列表中,输入DD-MON-RR HH24:MI:SS日期格式字段。
  4. 保存并关闭对话框,完成!

(我更喜欢 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 
于 2015-10-12T11:36:56.090 回答