【问题标题】:Convert DATETIME with YY to DATE with YYYY in Oracle SQL在 Oracle SQL 中将带有 YY 的 DATETIME 转换为带有 YYYY 的 DATE
【发布时间】:2021-07-22 19:14:31
【问题描述】:

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

Tms_field= 31-JAN-21 12.00.00.000000000 AM

我希望它是:

2021 年 1 月 31 日

我尝试了以下方法

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

但它会返回

21 年 1 月 31 日

我该如何解决? 提前谢谢你

【问题讨论】:

  • 日期加 2 千年。它存储不正确。
  • @GordonLinoff 可能只是 NLS_TIMESTAMP_FORMAT 设置为 DD-MON-RR HH12:MI:SS.FF9 AM 并且世纪被隐藏而不是设置为不正确的世纪。
  • @MT0 。 . .这是过去几年出现的一种可能性。这要明显得多。 . .从前。

标签: sql oracle timestamp


【解决方案1】:

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,这就是它不显示世纪的原因。)

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

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

SELECT CAST( tms_field AS DATE ) FROM my_table;

不过,DATE 也是一种二进制格式,它始终具有世纪、世纪、月、日、小时、分钟和秒组件,并且 NOT 也有格式。

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

【讨论】:

    猜你喜欢
    • 2013-12-04
    • 2018-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多