首页 > 解决方案 > Oracle:日期格式

问题描述

我正在尝试连接日期和时间,VARCHAR2然后将其传递给DATE. 问题是,当我将它传递给它时,DATE它不会在格式上打印日期时间date。我究竟做错了什么?

  o_data_final DATE;
  i_data       VARCHAR2:= '12/06/2000';
  i_hora       VARCHAR2:= '12:23:00';

  dbms_output.put_line('print:'||concat(concat(i_data,' '),i_hora));
  --prints correctly: 12/06/2000 12:23:00

  SELECT to_date(concat(concat(i_data,' '),i_hora), 'dd/mm/yyyy hh24:mi:ss')
  INTO o_data_final
  FROM dual;

  dbms_output.put_line('data:'||to_char(o_data_final));
  --prints wrong: 00.06.12

我希望 o_data_final 是 12/06/2000 12:23:00。谢谢。

标签: sqloracle

解决方案


然后您需要将格式传递给 TO_CHAR 函数,例如:

dbms_output.put_line('data:'||to_char(o_data_final, 'dd/mm/yyyy hh:mi:ss'));

Oracle 以内部二进制格式存储日期,它没有特定的人类可读格式。您将需要使用格式TO_CHAR或设置会话的默认格式NLS_DATE_FORMAT

alter session set NLS_DATE_FORMAT = 'dd/mm/yyyy hh:mi:ss';

目前,您正在获得输出:00.06.12目前您NLS_DATE_FORMAT的设置为yy.mm.dd

NLS_DATE_FORMAT您可以使用以下查询获取当前会话值:

SELECT
    *
FROM
    NLS_SESSION_PARAMETERS
WHERE
    PARAMETER = 'NLS_DATE_FORMAT';

干杯!!


推荐阅读