各位大神,请教一下,db2有什么方法可以将毫秒数转化成timestamp时间类型。在oracle中可以这样来实现SELECT TO_CHAR(operationtime / (1000 * 60 * 60 * 24) + TO_DATE('1970-01-01 08:00:00', 'YYYY-MM-DD HH24:MI:SS'), 'YYYY-MM-DD HH24:MI:SS') AS CDATE FROM table 。但是在db2中应该怎样实现呢
我這個方法有點複雜,你看下吧
SELECT VARCHAR_FORMAT((TIMESTAMP ('1970-01-01-08.00.00.00000')
+ (operationtime/86400000) DAYS
+ (MOD(operationtime,86400000)/3600000) HOURS
+ (MOD(MOD(operationtime,86400000),3600000)/60000) MINUTES
+ (MOD(MOD(MOD(operationtime,86400000),3600000),60000)/1000)SECONDS
+ (MOD(MOD(MOD(MOD(operationtime,86400000),3600000),60000),1000) * 100) MICROSECONDS)
,'YYYY-MM-DD HH24:MI:SS') FROM SYSIBM.SYSDUMMY1;
根据您给出的ORACLE下的SQL我给一个固定的时间测试一下,如下:
SYS@PROD1 > SELECT TO_CHAR(86401000 / (1000 * 60 * 60 * 24) + TO_DATE('1970-01-01 08:00:00', 'YYYY-MM-DD HH24:MI:SS'), 'YYYY-MM-DD HH24:MI:SS') AS CDATE FROM dual;
CDATE
-------------------
1970-01-02 08:00:01
SYS@PROD1 >
感觉您关心的精度应该到秒一级别,返回的CDATE。可以考虑以下思路比较简单的解决办法,但是精度低。
SELECT TO_DATE(bigint(TO_DATE('1970-01-01 08:00:00', 'YYYY-MM-DD HH24:MI:SS')) + (86401000 / (1000 * 60 * 60 * 24)),'YYYY-MM-DD HH24:MI:SS') FROM sysibm.dual;
如果考虑到高精度,我同意参考 朱圣节数据库管理员 , 澳門大豐銀行 的。