【问题标题】:PL/SQL sysdate format not working?PL/SQL sysdate 格式不起作用?
【发布时间】:2014-10-30 23:49:05
【问题描述】:

我在 PL/SQL 中的 sysdate 格式存在问题。 我尝试计算当天的年龄(所以它应该返回类似 20.44 的值)。 但是 sysdate 不适用于这种格式,并且值 v_leftijd 不断返回 -2000.91。 显然那不是我的年龄。我该如何解决这个问题? 我有以下代码:

declare
v_vandaag date := to_date(sysdate, 'DD-MM-YYYY');
v_geboortedatum date := to_date('29-05-2014', 'DD-MM-YYYY');
v_leeftijd number(10,2);

begin

--leeftijd/dagen = leeftijd in jaren
v_leeftijd := (v_vandaag - v_geboortedatum)/365;

dbms_output.put_line(v_leeftijd);

end;

【问题讨论】:

  • [..] the value v_leeftijd keeps returning -2000.91. Obvious that isn't my age. 恭喜你,你可能是有史以来最年轻的 SO 成员了!您究竟是如何在如此短的时间内涉足 Oracle 遗留技术的?

标签: plsql oracle-apex sysdate


【解决方案1】:

sysdate 已经是一个日期:

SET SERVEROUTPUT ON
declare
    v_geboortedatum date := to_date('29-05-2014', 'DD-MM-YYYY');
    v_leeftijd number(10,2);
begin
    --leeftijd/dagen = leeftijd in jaren
    v_leeftijd := (sysdate - v_geboortedatum)/365;

    dbms_output.put_line(v_leeftijd);
end;
/

【讨论】:

  • 谢谢!它现在工作正常,对我来说。但是,当我们运行我们的 apex 应用程序时,我的队友将获得不同的价值。因为在荷兰,计算机以某种方式具有不同的 sysdate。我的电脑是英文格式的。我该如何解决这个问题?
  • 是的 sysdate 是系统日期并且取决于时区。您对此无能为力,但我怀疑这是一个问题,因为您操作的所有日期都是硬编码的,对吗? 29-05-2014 不一定是相同的 PST 或 GMT。我想说的是您必须就标准时区达成一致。在业界我们通常选择 UTC 来存储日期。请注意,SYSDATE 是不同于 oracle 日期的 SYSTEM 日期。这意味着它使用您的服务器的时区,而不是数据库。
  • 感谢您的解释!由于这是一个学校项目,所以只使用服务器时间就可以了。但记住这一点很好。
猜你喜欢
  • 1970-01-01
  • 2020-07-08
  • 1970-01-01
  • 2016-03-17
  • 2017-04-06
  • 2021-04-20
  • 2023-03-07
  • 1970-01-01
  • 2014-03-23
相关资源
最近更新 更多