繁体   English   中英

Oracle 数据类型转换

[英]Oracle Data type convert

在我的表 (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的表都发生了变化。 那么有没有一种解决方案可以改变一个表日期类型而不是整个数据库?

日期列没有人类可读的格式; 有一个内部表示,客户端决定如何显示结果(通常基于 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 格式,因为运行您的代码的其他人可能在他们的会话中有不同的设置。 (作为相关说明,不要依赖于字符串到日期的隐式转换——您不在此处,但它们经常一起使用...)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM