oracle更新日期格式掩码

civ*_*ine 2 oracle plsql

我有这个程序,我需要生日字段格式为16-JUL-2018,但是当我运行程序时它以16-JUL-18格式更新.如何以想要的格式更新它?

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;
Run Code Online (Sandbox Code Playgroud)

MT0*_*MT0 6

您不需要转换i_birthdayDATE使用,TO_DATE因为它已经是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;
Run Code Online (Sandbox Code Playgroud)

如何以想要的格式更新它?

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

日期没有格式 - 它以7字节(代表年,月,日,小时,分钟和秒)的内部存储在数据库中,直到您使用的是任何用户界面(即SQL/Plus, SQL Developer,Java等)尝试将它显示给您,即用户,并将其转换为您会发现有意义的(通常是字符串)的日期,其中日期被赋予格式,以便您(用户)在其上发现它有意义客户端软件.

既然你传入了一个DATE你不需要做任何事情.

你可能想问的是:

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

如果您使用的是SQL/Plus或SQL Developer,那么它将使用NLS_DATE_FORMATsession参数来格式化日期.你可以改变这个:

ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY';
Run Code Online (Sandbox Code Playgroud)

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

您还可以按照此处所述更改SQL Developer GUI中的首选项.

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

SELECT party_id,
       username,
       first_name,
       TO_CHAR( birthday, 'DD-MON-YYYY' ) AS birthday
FROM   affiliate_v
Run Code Online (Sandbox Code Playgroud)