两个日期之间的oracle差异

Posted

技术标签:

【中文标题】两个日期之间的oracle差异【英文标题】:oracle difference between two dates 【发布时间】:2015-12-07 20:23:50 【问题描述】:

我需要找出两个日期之间的天数。

代码如下:

declare
datum DATE;
sdate DATE;
shpord NUMBER;
rozdiel NUMBER;
MESSAGE VARCHAR(2000) := 'Nemozete Uvolnit VO c.';

begin
datum := TO_DATE('&OLD:NEED_DATE','DD.MM.YYYY');
sdate := TO_DATE(sysdate,'DD.MM.YYYY');

rozdiel := datum - sdate;
IF rozdiel > 5 THEN
   ERROR_SYS.Record_General('Nemozete Uvolnit VO c','');
END IF;
end;

我收到一个错误:

ORA-01858:在需要数字的地方发现了一个非数字字符

【问题讨论】:

@Consider 在未来,也请编辑出谢谢和其他类似的噪音。这将使您建议的修改更加完整。 不要sdate := TO_DATE(sysdate,'DD.MM.YYYY');sysdate已经是一个日期。您的代码采用 sysdate 并隐式将其转换为字符串,因为 to_date 采用字符串。用于隐式转换的格式基于NLS_DATE_FORMAT。然后to_date 将该字符串转换回日期。如果 NLS_DATE_FORMAT` 与您指定的返回日期的字符串不匹配,则往返字符串和返回将给出错误或不正确的结果。 date 值上调用 to_date() 以将其转换为 date 是完全错误的。 【参考方案1】:

不要在约会时打电话给to_datesysdate 已经是 date。如果你想从datum中减去当天的午夜

declare
  datum DATE;
  sdate DATE;
  shpord NUMBER;
  rozdiel NUMBER;
  MESSAGE VARCHAR(2000) := 'Nemozete Uvolnit VO c.';
begin
  datum := TO_DATE('&OLD:NEED_DATE','DD.MM.YYYY');
  sdate := trunc(sysdate);

  rozdiel := datum - sdate;
  IF rozdiel > 5 THEN
     ERROR_SYS.Record_General('Nemozete Uvolnit VO c','');
  END IF;
end;

【讨论】:

【参考方案2】:

改变这一行:

sdate := TO_DATE('sysdate','DD.MM.YYYY');

到:

sdate := sysdate;

您正在尝试将 STRING 'sysdate' 转换为日期,而不是 sysdate 的函数结果。

另外,请注意您的 nls 设置,如果您的日期格式未设置为“dd.mm.yyyy”,您将会收到错误消息。

【讨论】:

你好,是的,但是有同样的错误。我认为不同的数据类型存在问题。但我不知道在哪里。 需要一个数字。 @denn:一旦我解决了“sysdate”问题,它就对我有用……所以如果你仍然遇到错误,请显示完整的脚本,显示完整的错误……所以我们可以看到发生了什么错误/发生的位置。 (并显示完整的输入:)) @denn:在 cmets 中发布代码的可读性不是很高。请编辑您的原始帖子。并请包括错误中提到的 # 行。 @Ditto,是的,它确实很痛,尤其是如果 NLS_DATE_FORMATto_date 上的显式格式不匹配。

以上是关于两个日期之间的oracle差异的主要内容,如果未能解决你的问题,请参考以下文章

计算 Oracle SQL 中 2 个日期/时间之间的差异

从Oracle中的日期差异计算年份

没有闰日的两个日期之间的差异

休眠 - 两个日期之间的差异

Kotlin:获取两个日期之间的差异(现在和以前的日期)

如何找到两个日期之间的天数差异[重复]