2015-05-12 67 views
0

我需要創建一個oracle plsql腳本,其輸入參數v_date爲帶時區類型的時間戳。 另外,我需要驗證v_date的格式是否符合上述格式'YYYY-MM-DD HH24:MI:SS TZH:TZM'。 我應該如何實現這一目標?在oracle中檢查帶有時區變量的時間戳格式plsql

我想通過改變輸入參數v_date爲字符串 achieveing這個,然後這個字符串轉換成時間戳與時區,如果在轉換則任何出錯的結論是格式錯誤。但它似乎TO_TIMESTAMP_TZ當日期字符串以不同的格式w.r.t指定的格式,而不是轉換它時,函數不會引發錯誤。

例如,

SELECT TO_TIMESTAMP_TZ('15-APR-15', 
    'YYYY-MM-DD HH:MI:SS TZH:TZM') FROM DUAL; 

實際結果:14-APR-15 11.50.00.000000000 PM AMERICA/CHICAGO

預期結果:Some error as format is not as per 'YYYY-MM-DD HH:MI:SS TZH:TZM'

總之,我想知道如何驗證時間戳與時區類型的格式。

+0

沒有在查詢一個錯字,正確的查詢:SELECT TO_TIMESTAMP_TZ('15 -APR-15','YYYY-MM-DD HH:MI:SS TZH:TZM')來自DUAL; – PVJ

+0

您將如何將值轉換爲字符串以傳遞它?來自哪裏的價值,以及爲什麼你認爲你不能將參數作爲時間戳與時區保留下來? – Boneist

+0

我的實際情況是,接受格式爲「yyyy-MM-dd'T'HH:mm:ss.SSSZ」的輸入參數v_date,然後驗證傳入v_date的值是否爲給定的「yyyy-MM-dd」 T'HH:mm:ss.SSSZ「格式。直到現在無論我在這方面做了什麼研發,似乎「yyyy-MM-dd'T'HH:mm:ss.SSSZ」在oracle中都不是有效的時間戳格式。所以現在我試圖在'YYYY-MM-DD HH:MI:SS TZH:TZM'中用v_Date作爲字符串來實現故事,然後使用TO_TIMESTAMP_TZ()來驗證參數的格式。 – PVJ

回答

1

你可以嘗試添加「FX」修改的格式,它說甲骨文「預計這一確切格式」:

SELECT TO_TIMESTAMP_TZ('15-APR-15 ', 'fxYYYY-MM-DD HH:MI:SS TZH:TZM') FROM DUAL; 

SELECT TO_TIMESTAMP_TZ('15-APR-15 ', 'fxYYYY-MM-DD HH:MI:SS TZH:TZM') FROM DUAL 
         * 
Error at line 1 
ORA-01862: the numeric value does not match the length of the format item