我是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的文档。注意他们返回的数据类型。 –