gpt4 book ai didi

Oracle 日期比较问题完全困惑 - 我做错了什么?

转载 作者:行者123 更新时间:2023-12-03 23:42:00 29 4
gpt4 key购买 nike

我是新手,正在学习 Oracle。我想比较功能中的日期,在实现功能时遇到输出错误的问题并且没有得到有效答案我搜索了很多解决方案但徒劳无功....

目前我找到的解决方案是:

  1. 不要将日期时间与日期进行比较。

  2. 如果使用 DateTime,首先需要 TRUNC 来去除时间因素。

  3. 比较日期时首先将日期转换为 To_char(anyDate,'dd-mon-yyyy');

  4. 如果我们比较 1-dec-13 和 27-dec-13 之类的日期,请确保这两个年份相同。两者都应该是 2013 年的。

我已经通过了到目前为止我发现的所有约束,但未能找到解决方案。有谁能够帮助我。我在做什么错误?提前感谢您的期待。

 SET serveroutput on;
DECLARE
startDate DATE := to_date('1'|| '/' ||to_char(sysdate, 'MM') || '/2013','DD/MM/YYYY');
secDate DATE :=to_date(SYSDATE, 'DD/MM/YYYY ');

BEGIN

DBMS_OUTPUT.PUT_LINE( 'if secDate '|| secDate ||' is Greater Then');
DBMS_OUTPUT.PUT_LINE( 'StartDate '|| startDate || ' Output = ' );

if(secDate>startDate)
then
DBMS_OUTPUT.PUT_LINE('True' );
else
DBMS_OUTPUT.PUT_LINE('false');

end if;
end;

最佳答案

您的顺序:

i Oracle DATE 保存日期和时间,精确到秒。您可以比较它们,例如 12/27/2013 00:00:00 小于 12/27/2013 09:00:00

ii 如果您想查看两个 DATE 值是否带有时间分量(例如 12/27/2013 14:00:0012/27/2013 12:34:56) 在同一天,那么是的,你想要 TRUNC: IF TRUNC(firstDate) = TRUNC (第二个日期)

iii 使用 TO_CHAR 比较 DATE 值没有任何好处。如果不想在比较中包含时间,请使用 TRUNC;如果您需要时间,请将其保留。

iv 年份不必相同。像 12/27/2013 这样的日期大于 12/27/2012 并且小于 12/27/2014。如果您将其保留为 DATE 类型,Oracle 会做正确的事情。

至于你的代码出了什么问题,看看你的startDate初始化:

'1'|| '-' ||to_char(sysdate, 'MM')  || '2013'

今天,这将为您提供 1-122013,它与 TO_DATE 中的格式字符串 DD/MM/YYYY 不匹配> 打电话。这就是为什么你没有得到像样的约会。

如果你想得到当月的第一天,Oracle提供了一个方便的快捷方式:

startDate := TRUNC(SYSDATE, 'MONTH');

所以我会忘记所有的格式并使用这样的东西;请注意它是如何简单得多:

SET serveroutput on;
DECLARE
startDate DATE := TRUNC(SYSDATE, 'MONTH');
secDate DATE := SYSDATE;
BEGIN
DBMS_OUTPUT.PUT_LINE( 'if secDate '|| secDate ||' is Greater Then');
DBMS_OUTPUT.PUT_LINE( 'StartDate '|| startDate || ' Output = ' );

if(secDate>startDate) then
DBMS_OUTPUT.PUT_LINE('True' );
else
DBMS_OUTPUT.PUT_LINE('false');
end if;
END;

请注意,secDate 将仅在每月第一天的午夜等于 startDate,此时两个值(2013 年 12 月)均为 12/27/2013 00:00:00。在一个月的所有其他时间,secDate 会更大。

请注意,我使用 12/27/2013 00:00:00 来解释 2013 年 12 月 27 日午夜。那只是为了我可以用英语解释日期。这不是 Oracle 存储日期的方式。 Oracle 如何存储日期?这并不重要 - 重要的是,如果您将日期保留为 DATE 格式并在您只关心日期时使用 TRUNC ,Oracle 会很好地处理日期,不是关于时间。

关于Oracle 日期比较问题完全困惑 - 我做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20802434/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com