【问题标题】:Oracle: Date formatOracle:日期格式
【发布时间】:2019-10-02 08:17:18
【问题描述】:

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

  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。谢谢。

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    然后您需要将格式传递给 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';
    

    干杯!!

    【讨论】:

      【解决方案2】:

      请尝试:

        declare 
        o_data_final DATE;
        i_data       VARCHAR2(2000):= '12/06/2000';
        i_hora       VARCHAR2(2000):= '12:23:00';
        begin
        dbms_output.put_line('print:'||concat(concat(i_data,' '),i_hora));
        --prints correctly: 12/06/2000 12:23:00
      
        SELECT to_date(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, 'dd/mm/yyyy hh24:mi:ss'));
        end;
      

        declare 
        o_data_final DATE;
        i_data       VARCHAR2(2000):= '12/06/2000';
        i_hora       VARCHAR2(2000):= '12:23:00';
         begin
        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, 'dd/mm/yyyy hh24:mi:ss'));
        end;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多