在Oracle SQL中将DATETIME与YY转换为DATE与YYYY



我想将时间戳字段转换为日期。它目前有以下格式:

Tms_field=2021年1月31日上午12.00.000000000

我希望它是:

2021年1月31日

我试过以下

select to_date(to_char(Tms_field,'dd-mon-yyyy')) from my_table 

但它返回

2021年1月31日

我该怎么修?提前感谢

TIMESTAMP列是一种二进制数据类型,由7到20个字节组成(世纪、世纪年、月、日、小时、分钟和秒各1个字节,小数秒最多6个字节,如果有任何时区信息,则最多7个字节(。它没有格式。

您看到的是客户端程序以用户会发现更有用的方式显示TIMESTAMP,因此您需要更改此显示格式,或者通过将其转换为字符串将格式应用于TIMESTAMP列。

因此,如果要以dd-mon-yyyy格式显示TIMESTAMP,请使用TO_CHAR:

SELECT TO_CHAR( tms_field, 'dd-mon-yyyy' ) FROM my_table;

如果您想更改用户界面显示所有TIMESTAMP值的方式,并且您正在使用SQL/Plus或SQL Developer,则可以使用:

ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'dd-mon-yyyy';
SELECT tms_field FROM my_table;

(注意:这不会影响数据库中的值,它纯粹用于用户界面中的格式化。(

*(注意2:你可能会发现你当前的NLS_TIMESTAMP_FORMATDD-MON-RR HH12:MI:SS.FF9 AM,这就是为什么它没有显示世纪。(

如果您使用的是不同的用户界面,则需要查看该UI的用户指南。

如果您想将TIMESTAMP转换为DATE,那么只需使用CAST:

SELECT CAST( tms_field AS DATE ) FROM my_table;

然而,DATE也是一种二进制格式,它总是包含世纪、世纪年、月、日、小时、分钟和秒组成部分,并且也有NOT格式。

它可能会在没有时间组件的情况下由您使用的用户界面显示,但它仍然会在后台。如果要更改所有DATE值的显示方式,可以更改NLS_DATE_FORMAT会话参数以更改SQL/Plus和SQL Developer的默认显示格式。

最新更新