代码之家  ›  专栏  ›  技术社区  ›  civesuas_sine

Oracle更新日期格式掩码

  •  2
  • civesuas_sine  · 技术社区  · 6 年前

    我有这个过程,我需要生日字段的格式是2018年7月16日,但当我运行过程时,它会以2018年7月16日的格式更新。 如何以所需格式更新?

    PROCEDURE update_affiliate (pid                NUMBER,
                                       i_username         VARCHAR2,
                                       i_first_name       VARCHAR2,                              
                                       i_birthday         DATE)
           IS
           BEGIN
              UPDATE   affiliate_v
                 SET   username = UPPER (i_username),
                       first_name = i_first_name,
                       birthday = TO_DATE(i_birthday,'DD-MON-YYYY'),
               WHERE   party_id = pid;
    
           END update_affiliate;
    
    1 回复  |  直到 6 年前
        1
  •  6
  •   MT0    6 年前

    你不需要转换 i_birthday 给一个 DATE 使用 TO_DATE 因为它已经是 日期 数据类型。只需使用:

    PROCEDURE update_affiliate (
      pid                NUMBER,
      i_username         VARCHAR2,
      i_first_name       VARCHAR2,                              
      i_birthday         DATE)
    IS
    BEGIN
      UPDATE affiliate_v
      SET    username   = UPPER (i_username),
             first_name = i_first_name,
             birthday   = i_birthday,
      WHERE  party_id   = pid;
    END update_affiliate;
    

    如何以所需格式更新?

    这是一种常见的误解,即数据库中的日期具有格式。

    日期没有格式-它是 stored internally to the database as 7-bytes (表示年、月、日、时、分和秒)直到您正在使用的任何用户界面(如sql/plus、sql developer、java等)尝试向您、用户显示它,并将其转换为您会发现有意义的内容(通常是字符串)时,才会为日期指定格式,以便您、用户,在客户端软件中发现它的意义。

    因为你要经过一个 日期 你不需要做任何事。

    你可能想问的是:

    现在我已经更新了日期,如何让用户界面以查询表时所需的格式显示日期?

    如果您使用的是sql/plus或sql developer,那么它将使用 NLS_DATE_FORMAT 设置日期格式的会话参数。你可以 change this using 以下内容:

    ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY';
    

    注意:这是一个会话参数,只会更改当前会话的格式(不适用于任何其他用户或任何后续会话)。

    您还可以在sql开发人员gui中更改首选项,如下所示 described here 是的。

    或者你可以用 TO_CHAR 并设置所需的格式:

    SELECT party_id,
           username,
           first_name,
           TO_CHAR( birthday, 'DD-MON-YYYY' ) AS birthday
    FROM   affiliate_v