我正嘗試在Oracle中創建一個用戶定義的函數,該函數在給定包含日期子字符串的文本參數時將返回一個DATE。我試着寫這個的幾種方法,並且似乎都拋出了同樣的錯誤:錯誤在Oracle中編譯用戶定義的函數PLS-00103
CREATE OR REPLACE FUNCTION lm_date_convert (lm_date_in IN VARCHAR2(50))
RETURN DATE DETERMINISTIC IS
BEGIN
RETURN(TO_DATE(REGEXP_REPLACE(lm_date_in, '([[:digit:]]{2})[-/.]*([[:digit:]]{2})[-/.]*([[:digit:]]{4})','\3-\1-\2'), 'YYYY-MM-DD'));
END;
錯誤:
FUNCTION lm_date_convert Compiled. 1/46
PLS-00103: Encountered the symbol "(" when expecting one of the following::= .) , @ % default character The symbol ":=" was substituted for "(" to continue.
任何對此的思考,和一般的UDF寫作技巧(和好參考)歡迎!謝謝。
感謝您的解決方案 - 我希望它會是這樣的。 我有不同形式的字符串,比如'2010-08-03 00:00:00.0',我需要處理成日期對象。我想我可以使用 'TO_DATE(SUBSTR('2010-08-03 00:00:00.0',1,10),'YYYY-MM-DD')' 我應該這樣做而不是使用Regex?什麼時候使用或避免正則表達式的指針,爲什麼? 感謝您的幫助! – Stew 2010-08-03 17:23:51
如果你真的想要一個VARCHAR2(50),那麼聲明一個VARCHAR2(50)類型並使用該類型。 – darreljnz 2010-08-03 19:52:08