2011-11-02 97 views
3

我希望用戶能夠輸入日期格式字符串,以便他們可以指定他們希望如何顯示/輸入日期值。如何測試日期格式字符串是否是Oracle中的有效日期格式字符串

如何驗證此日期格式字符串,以便他們只能輸入有效的Oracle日期格式字符串?

+3

據推測,如果他們進入一個無效的格式,你的代碼會拋出一個'ORA-01821:日期格式無法識別error'當您嘗試使用它 - 你不能把這個回傳給調用應用程序嗎? – StevieG

+5

您還需要考慮有日期格式是有效的,但實際上沒有用,例如, 'DD',這將允許用戶輸入'12',這意味着當前月份的第12個月。因此,我建議你向他們提供一個可供選擇的格式列表,而不是讓他們自己定義格式。 –

+0

謝謝,您的建議。可能的格式列表可能是最簡單的。 – Rene

回答

7

,你可以創建一個函數:

如:

FUNCTION is_valid_date_format ( 
    p_format IN VARCHAR2) 
RETURN BOOLEAN IS 
    l_date VARCHAR2(100) := NULL; 
BEGIN 
    l_date := TO_char(sysdate, p_format); 
    RETURN TRUE; 
EXCEPTION 
    WHEN OTHERS THEN 
     RETURN FALSE; 
END is_valid_date_format; 

,並在瞬間就會讓時間格式也使用這樣的

IF is_valid_date_format('dd/mm/yyyy') THEN 

,但是這將是簡單將其擴展爲不允許包含不需要的格式的格式,例如:hh hh24 mi ss

加:(你可能會想先大寫的格式字符串)

IF INSTR(p_format,'HH')>0 OR INSTR(p_format,'HH24')>0 
OR INSTR(p_format,'MI')>0 OR INSTR(p_format,'SS')>0 THEN 
    RETURN FALSE 
END IF; 
+0

感謝凱文,但這不是我的問題的答案。我不想知道p_date_as_string是否與p_format匹配。我想知道,如果p_format是一個有效的格式。 – Rene

+0

抱歉我的錯誤我會更新..... –