sql將毫秒數字轉換為日期
例如某個欄位的毫秒數為:1345626941701
轉換函式:select dateadd(s, 1345626941701/1000 ,'1970-1-1 08:00:00')
即用 毫秒數/1000 即可。
對於欄位:col/1000再用上面的函式即可
對於oracle麻煩點:
select to_date('1970-01-01 08:00:00','yyyy-MM-dd HH24:MI:SS')+(1345626941701/86400000 - 1/86400) from dual;
------------
在開發過程中,為了方便,經常將時間日期的毫秒數以整形的格式存到資料庫中,雖然方便了不同地方的處理,但也會增加些麻煩。比如,我要到資料庫裡直接看某個時間的值,都是一長串的數字,鬼都看不懂,想到看到該欄位的值,還要寫個轉換程式,把毫秒數在轉換成日期時間型別,或者拿個計算器來算。要檢視的記錄少,還能將就,如果多了,那不崩潰才怪呢。於是想到了在SQL裡直接轉換的方法,還好牛人多,在網上搜了一下,還真有相關的東西,原始的語句如下:
SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS') CURRENT_DATE, (SYSDATE- TO_DATE('1970-01-01','YYYY-MM-DD')) * 86400000 CURRENT_MILLI FROM DUAL;
這只是個例子,還不能直接解決上面的問題,所有就改了一下,是以自定義函式的形式存在的,程式碼如下:
CREATE OR REPLACE FUNCTION DATELONG2TEXT (PARAM IN LONG) RETURN VARCHAR2 AS
V_TEXT VARCHAR2(64);
BEGIN
SELECT TO_CHAR(TO_DATE('1970-01-01', 'YYYY-MM-DD')+(PARAM/(24*60*60*1000) + 8/24 - 1/86400),'YYYY-MM-DD HH24:MI:SS') INTO V_TEXT FROM DUAL;
RETURN V_TEXT;
END DATELONG2TEXT;
使用示例:
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS'),SYSDATE,DATELONG2TEXT((SYSDATE - 8 / 24 - TO_DATE('1970-01-01', 'YYYY-MM-DD')) * 86400000) FROM DUAL;
說明:
1、加上 8/24 ,是因為時間格式是GMT,結果會受時區的影響,我們在東8區,所以要加上8個小時 ;
2、減1/86400,至於為什麼,我也說不清楚,只是在實際當中確實多了1秒,只好以這種方式減去了,根據時間情況確定是否進行調整。
當然,我們也可以類似的寫出將日期由字串轉換成毫秒數的函式。