我有这个程序,我需要生日字段格式为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)
您不需要转换i_birthday为DATE使用,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)