我是Oracle開發新手,仍然發現它的許多功能以及PL/SQL和SQL Server的T-SQL之間的差異。Oracle 11g PL/SQL中的TO_DATE函數是有上限還是下限的
所以我的'項目'是創建一個函數,可以從未來或過去生成一個隨機的日期。用戶應該能夠指定應該創建日期的上限/下限。
我可能爲時已晚,但爲了保持公正性,我將跳過爲什麼函數做什麼以及如何做的細節。對於實際問題重要和有意義的是以下行爲。
BEGIN
SYS.DBMS_OUTPUT.PUT_LINE(TO_DATE(TRUNC(SYSDATE + 6469), 'yyyy/mm/dd')); -- Dec 31, 2031
SYS.DBMS_OUTPUT.PUT_LINE(TO_DATE(TRUNC(SYSDATE - 4853), 'yyyy/mm/dd')); -- Jan 01, 2001
SYS.DBMS_OUTPUT.PUT_LINE(TO_DATE(TRUNC(SYSDATE + 7000), 'yyyy/mm/dd')); -- ERROR
END
簡單地說,當我足夠的天添加到系統日期超過2031年12月31日我收到以下錯誤消息... 「非數字字符被發現,其中一個數字,預計」 ......。我遇到同樣的問題,當我足夠減去從天將系統日期前的日期Jan 01 2001
當我刪除它不會破壞格式,但返回一個不可能日期...
BEGIN
-- returns 15-JUN-33
-- June 33rd 2015!!
SYS.DBMS_OUTPUT.PUT_LINE(TO_DATE(TRUNC(SYSDATE + 7000)));
END
因此,在我看來,這種函數有一些日期範圍限制... 2001年1月01日 - 2031年12月31日......這是真的還是我在這裏做錯了什麼?
謝謝!
暫時忘掉所有這些功能。你犯的錯誤可能會影響你的結果。相反,試試這個:to_char(sysdate + 7000,'yyyy/mm/dd')。至於你做錯了什麼,請閱讀to_date和trunc的文檔。注意他們返回的數據類型。 –