oracle时间戳设置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle时间戳设置相关的知识,希望对你有一定的参考价值。

设置了时间戳,为什么不是24小时机制的,是12小时机制的,如何修改成24小时机制的呢?

这个和数据库安装的时候选择的时区有关,一般国内安装都是选择北京时区。

查看timestamp
select current_timestamp,systimestamp from dual;
current_timestamp                         systimestamp
12-12月-18 04.24.02.427990 下午 +08:00    12-12月-18 04.24.02.427980 下午 +08:00

查看时区
select dbtimezone,sessiontimezone from dual; 
dbtimezone    sessiontimezone
+00:00        +08:00

对于显示是12小时制这个问题,和客户端的操作系统有关,与实际存储的数据无关。

如果想显示成24小时制,修改客户端操作系统的环境变量可以达到目的:

NLS_TIMESTAMP_FORMAT
YYYY-MM-DD HH24:MI:SS:FF6

按照上图设置后,重启plsql,查询后我们能看到时间显示成“2018-12-12 16:16:35:877000”这样的格式了。 

但是,如果建库时,时间设置错误或者是将来要改变时区时,表中的值会不会变化呢?因此引用官方的回答:

对于time zone数据类型的数据,即使你更新了数据库时区,原数据也不会进行对应调整,只能你导出数据,然后调整数据库时区,再把原始数据导入即可。所以,一般情况下,一定不要调整数据库时区。官方建议数据库时间采用UTC,因为这种时区性能好。如果没有显式指定数据库时区,数据库会使用操作系统的时区,但是如果操作系统时区不是一个合理的数据库时区,数据库则会使用默认的时区UTC,且UTC的取值范围为-12:00 to +14:00。等等,为什么会有+14?百度一下基里巴斯。这是一个神奇的网站国度。

来自:求助得到的回答
参考技术A 回乡偶书(贺知章)追问

????

将时间戳插入 Oracle 数据库中的 Varchar2 列

【中文标题】将时间戳插入 Oracle 数据库中的 Varchar2 列【英文标题】:Insert Timestamp into Varchar2 column in Oracle Database 【发布时间】:2014-06-16 20:19:02 【问题描述】:

我正在使用与 Oracle 11g 数据库接口的应用程序。我需要将 YYYYMMDDhhmmss 格式的时间戳插入 Varchar2 列中。

我的 SQL 更新查询是:

更新 CODELIST_XREF_ITEM 设置 RECEIVER_ITEM=TIMESTAMP 其中 LIST_NAME='BUSINESS_PROCESS';

TIMESTAMP 变量是需要插入的位置。我尝试将 TIMESTAMP 变量设置为 CURRENT_TIMESTAMP,但我无法对其进行格式化。

有什么建议吗?

提前感谢您的帮助!

【问题讨论】:

有一段时间没有使用 oracle,但尝试 'update CODELIST_XREF_ITEM set RECEIVER_ITEM=to_char(CURRENT_TIMESTAMP,'YYYYMMDD HH24MISSFF') where LIST_NAME='BUSINESS_PROCESS';' 【参考方案1】:

如果您想插入时间戳的字符表示(实际上您似乎需要 Oracle date 的字符表示,因为您不需要小数秒或时区),您可以使用 @ 987654322@函数。

to_char( sysdate, 'YYYYMMDDHH24MISS' )

所以你的UPDATE 声明将是

update CODELIST_XREF_ITEM 
   set RECEIVER_ITEM=to_char( sysdate, 'YYYYMMDDHH24MISS' )
 where LIST_NAME='BUSINESS_PROCESS';

如果您想要存储小数秒或时区或执行其他需要 timestamp 的操作,您可以使用相同的 to_char 函数,但格式掩码不同。

【讨论】:

非常感谢!你回答了我的问题。 确保将此答案标记为已批准,以便贾斯汀获得信任。谢谢。

以上是关于oracle时间戳设置的主要内容,如果未能解决你的问题,请参考以下文章

将时间戳插入 Oracle 数据库中的 Varchar2 列

oracle:如何获取本地时间戳而不是服务器时间戳

如何在Oracle中将时间戳转化为日期格式

怎么在Oracle中将时间戳转化为日期格式

node 获得时间戳怎么精确到秒

Oracle - 计算时间戳之间的差异大于 1 小时的时间戳