gpt4 book ai didi

oracle - 如何理解给定的 sysdate 是日期或时间戳

转载 作者:行者123 更新时间:2023-12-02 16:17:34 28 4
gpt4 key购买 nike

我有一个过程。它采用 Date 类型的日期参数。我想知道的是其他用户将 sysdate 发送到我的过程。他们将 sysdate 发送到我的过程的格式是什么?

例如:01/02/2021 或 01/02/2020 00:00:00(时间戳)

我的程序是否接受所有发送格式?也许 Date 类型将发送格式转换为这种样式 01/02/2020。我不确定。

我的意思是我的日期参数是否接受所有日期格式,因为我想在我的程序中使用没有秒或分钟的日期。

我的程序是

DECLARE
var_P_DATE DATE; (for example : 01/01/2021)
BEGIN
SELECT last_day(var_P_DATE) INTO v_last_day FROM DUAL; (31/01/2021)
if v_last_day = var_P_DATE (it returns false because no second or minutes)
.....
END;

我使用了 DBMS.OUTPUT。我认为日期类型转换就像这样 01/02/2021,我没有收到任何错误,但我不确定。

最佳答案

您的过程只会收到一个date,因为那是形式参数的数据类型。当过程被调用时,调用者可以提供一个 date,或者可以隐式转换为 date 的东西(尽管它们不应该;隐式转换通常是一件坏事,特别是来自字符串)。

date 数据类型包括时间部分。如果传递给您的日期不是午夜时间,但您希望忽略该日期,例如 sysdate,您可以使用 the trunc() function ,它是默认的 'DD' 格式;而且你不需要select from dual:

v_last_day := last_day(trunc(var_P_DATE));

如果调用者传入 systimestamp,那么当您看到它时,它仍然会隐式转换为 date - 这意味着它会丢失任何小数秒和时区信息,但保留小时、分钟和秒。

日期和时间戳没有任何固有的人类可读格式。可以使用各种格式显示日期 - see the documentation - 显式使用 to_char() 和格式模型,或者隐式使用您的 session 设置。

当你做的时候

dbms_output.put_line(var_P_DATE);

您正在使用 session 的 NLS_DATE_FORMAT 设置将 date 值隐式转换为字符串。因此,不同的用户可能会以不同的格式看到它。你无法控制它。如果您想查看特定格式,请指定该格式,例如:

dbms_output.put_line(to_char(var_P_DATE, 'YYYY-MM-DD'));

您也无法控制调用者是否看到该输出 - 这取决于应用程序/客户端及其设置。看起来您可能只是用它来调试比较问题,所以这在这里可能无关紧要。

作为演示:

declare
var_P_DATE date := sysdate;
v_last_day date;
begin
v_last_day := last_day(var_P_DATE);
dbms_output.put_line(to_char(v_last_day, 'YYYY-MM-DD HH24:MI:SS'));
v_last_day := last_day(trunc(var_P_DATE));
dbms_output.put_line(to_char(v_last_day, 'YYYY-MM-DD HH24:MI:SS'));
end;
/

2021-02-28 09:59:02
2021-02-28 00:00:00

db<>fiddle demo

关于oracle - 如何理解给定的 sysdate 是日期或时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66257219/

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