【问题标题】:Oracle Data type convertOracle 数据类型转换
【发布时间】:2020-04-02 00:28:20
【问题描述】:

在我的表 (EventPlanLine) 中有两列已创建数据类型为 Date、TimeStart 和 TimeEnd。嗯,插入数据如下所示:

Insert into EVENTPLANLINE (TIMESTART,TIMEEND) 
values (to_date('25-OCT-18 8:00:00','DD-MON-RR HH24:MI:SS'),
        to_date('25-OCT-18 17:00:00','DD-MON-RR HH24:MI:SS'));

结果:

25-OCT-18, 25-OCT-18

请原谅我只拿起那两列数据插入来显示。列中数据呈现结果显示DD-MON-RR格式无时间。这是一个问题,数据如何以 DD-MON-RR HH24:MI:SS 格式呈现。我检查了在线资源,我可以从 Oracle 更改 NLS_DATE_FORMAT,是的,它确实如此,并且随着时间的推移如下所示

ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-RR HH24:MI:SS'

但是数据库中所有数据类型为Date的表都发生了变化。那么有没有一种解决方案可以更改一个表日期类型而不是整个数据库?

【问题讨论】:

  • 需要格式化,选择时:select to_char(timestart, 'dd-mon-rr') from ..

标签: sql oracle datetime


【解决方案1】:

日期列没有人类可读的格式;有一个内部表示,并且客户端决定如何显示结果(通常基于 NOS_DATE_FORMAT),除非您在查询中使用to_char() 显式格式化列。

但是数据库中所有数据类型为Date的表都发生了变化

不,您的客户正在使用该设置将日期显示为格式化字符串。 Notign 已在数据库中更改。

那么有没有一种解决方案可以更改一个表日期类型而不是整个数据库?

不,您不能为表格中的列设置格式 - 它们只是日期。

您所能做的就是在查询中明确格式化;然后可以对每个日期进行不同的格式化。相当做作,但为了展示:

alter session set nls_date_format = 'DD-Mon-RR';

select
  timestart,
  timeend,
  to_char(TIMESTART, 'YYYY-MM-DD HH24:MI:SS') as timestart_2,
  to_char(TIMEEND, 'FMDay DD/Mon/YYYY HH:MI AM', 'NLS_DATE_LANGUAGE=ENGLISH') as timeend_2
from EVENTPLANLINE;

TIMESTART TIMEEND   TIMESTART_2         TIMEEND_2                  
--------- --------- ------------------- ---------------------------
25-Oct-18 25-Oct-18 2018-10-25 08:00:00 Thursday 25/Oct/2018 5:0 PM

如果结果格式很重要,那么不要依赖 NLS 格式,因为运行您的代码的其他人可能在他们的会话中具有不同的设置。 (作为相关说明,不要依赖字符串到日期的隐式转换 - 你不在这里,但它们经常一起......)

【讨论】:

    猜你喜欢
    • 2021-03-02
    • 1970-01-01
    • 1970-01-01
    • 2021-04-27
    • 2019-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多