我有一个过程,它使用date类型为Date的date参数。我想知道的是其他用户将sysdate发送到我的过程。他们以哪种格式将sysdate发送到我的过程?
例如:01/02/2021或01/02/2020 00:00:00(时间戳)
我的程序是否接受所有发送格式?也许日期类型转换了这种格式的发送格式01/02/2020。我不确定。
我的意思是我的Date参数可以接受所有日期格式,因为我想在过程中使用日期而不用秒或分钟。
我的程序是
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。我认为Date类型的转换就像20年1月2日这样,我没有收到任何错误,但我不确定。
您的过程只会收到一个date
,因为这是形式参数的数据类型。调用该过程时,调用方可以提供date
或可以隐式转换为a的内容date
(尽管不应这样做;隐式转换通常是一件坏事,尤其是从字符串开始)。
所述date
数据类型包括时间分量。如果您正在传递与要忽略,如非深夜时段的日期sysdate
,你可以使用的trunc()
功能,它的默认'DD'
格式; 而且您不需要select from dual
:
v_last_day := last_day(trunc(var_P_DATE));
如果呼叫者通过,systimestamp
那么到date
您看到它时,它仍将被隐式转换为a-这意味着它会丢失任何小数秒和时区信息,但会保留小时,分钟和秒。
日期和时间戳没有任何固有的人类可读格式。日期可以使用多种格式显示-请参阅文档-显式使用to_char()
和格式模型,或隐式使用会话设置。
当你做
dbms_output.put_line(var_P_DATE);
您正在date
使用会话的NLS_DATE_FORMAT
设置将值隐式转换为字符串。因此,不同的用户可能会以不同的格式看到它。您对此无能为力。如果要查看特定格式,请指定该格式,例如:
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句