2
我們一直在尋找一些遺留代碼,並發現函數檢查date(VARCHAR2)是否以正確的格式'YYYY-MM-DD HH24:MI:SS'傳遞。它使用簡單的構建體有效的日期格式檢查Oracle - 奇怪的行爲
function IS_CORRECT_TIMESTAMP(P_EVENT_TIMESTAMP varchar2)
return number is
V_TIMESTAMP timestamp;
begin
select TO_TIMESTAMP(NVL(P_EVENT_TIMESTAMP, '1'),
'YYYY-MM-DD HH24:MI:SS')
into V_TIMESTAMP
from DUAL;
return 1;
exception
when others then
return - 1;
end;
問題是,當我通過例如'22 -AUG-13' 值,則它不會引發任何異常。 這可能是什麼原因?
感謝您的意見。
Oracle嘗試(太硬有時)是有幫助的,並[將字符串轉換爲與一些靈活性日期](http://docs.oracle.com/cd/E11882_01/server.112/e26088 /sql_elements004.htm#sthref405)。你已經被告知使用'FX'修飾符來防止這種情況發生。僅供參考,您的型號'22-AUG-13'變成了'0022-08-13 00:00:00',但仍然有效;如果你使用'RRRR'而不是'YYYY',它會是'2022-08-13 00:00:00',這也是有效的。儘管如此,某些日期仍然會失敗。 '22-AUG-99'。 –