更改 oracle sql 的日期结构

changing date structure for oracle sql

我试图在 oracle SQL 中将一个已经存在的日期从 ('DD,MON,YY') 修改为 ('DD,MONTH,YYYY'),但它对我不起作用

ALTER TABLE EMP MODIFY (hiredate to_date ('DD,MON,YYYY'))

Oracle中的一个DATE值没有任何格式!

我假设(并希望)您只是想更改默认的 显示 格式。使用

ALTER SESSION SET NLS_DATE_FORMAT = 'DD,MONTH,YYYY';

如果 hiredate 的数据类型是 VARCHAR2 而不是 DATE,请将数据类型迁移到正确的 DATE 并从我的答案顶部重新开始。

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

您无法修改 DATE 数据类型值的格式,因为它没有格式;它以 7 bytes 的形式存储在数据库中:2 代表年,1 代表月、日、小时、分钟和秒,并且始终具有这些组件,它们只是数字。数据库不关心格式;它只关心值。

您用来访问数据库的客户端软件关心格式,因为它必须与您(用户)交谈,您通常不喜欢被提供大量数字,客户端软件会尝试格式化为你约会。

如果你想问:

How do we get <insert name of SQL client software here> to change the default format it uses to display a DATE data type?

对于SQL/Plus和SQL开发人员,您可以使用NLS_DATE_FORMAT会话参数:

ALTER SESSION SET NLS_DATE_FORMAT = 'DD,MONTH,YYYY';

如果您使用不同的软件与数据库对话,那么您需要阅读该软件的 manual/documentation。

或者,如果您想问:

How do we display DATE values from a table with a specific format?

SELECTTO_CHAR函数结合使用:

SELECT TO_CHAR( date_column, 'DD,MONTH,YYYY' ) AS formatted_date_column
FROM   table_name;