我有此过程,我需要生日字段的格式为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;
答案 0 :(得分:6)
您不需要使用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;
如何以所需格式更新它?
这是一个常见的误解,认为数据库中的日期具有格式。
日期没有格式-它是stored internally to the database as 7-bytes(代表年,月,日,小时,分钟和秒),并且直到您使用的任何用户界面(即SQL / Plus,SQL)都没有开发人员,Java等)尝试向您(用户)显示它,并将其转换为您认为有意义的东西(通常是字符串),并为日期指定格式,以便您(用户)在客户端上找到有意义的东西软件。
由于您传递了DATE
,因此您无需执行任何操作。
您可能想问的是:
现在我已经更新了日期,如何获取用户界面以查询表时想要的格式显示日期?
如果您使用的是SQL / Plus或SQL Developer,则它将使用NLS_DATE_FORMAT
会话参数来格式化日期。您可以change this using:
ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY';
注意:这是一个会话参数,只会更改当前会话的格式(不会更改任何其他用户或任何后续会话的格式)。
您还可以在SQL Developer GUI中将首选项更改为described here。
或者您可以只使用TO_CHAR
并设置所需的格式:
SELECT party_id,
username,
first_name,
TO_CHAR( birthday, 'DD-MON-YYYY' ) AS birthday
FROM affiliate_v