暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

oracle中转换函数to_date的时间格式转换(显示为:0007/1/22)

原创 狗剩儿 2022-03-01
1649

前言

最近开发那边反馈了一个问题, select to_date(sysdate,‘yyyy/mm/dd hh24:mi:ss’) from dual;时候结果显示是0007/1/22
在这里插入图片描述


提示:以下是本篇文章正文内容,下面案例可供参考

一、问题分析

因为to_date是类型的转化无法进行格式转换,应先加入to_char进行格式转换,正确的写法应该是:

SQL> select to_date(to_char(sysdate,'yyyy/mm/dd hh24:mi:ss'),'yyyy/mm/dd hh24:mi:ss') from dual;

二、尝试解决方案

但开发上程序很多地方都是这样写的,更改工作量大,只能想其他办法,那就是修改nls_date_format参数:这里涉及到:NLS_DATABASE_PARAMETERS、NLS_SESSION_PARAMETERS、NLS_INSTANCE_PARAMETERS

对于system尝试修改:

SQL> alter system set nls_database_parameters='yyyy/mm/dd hh24:mi:ss' scope=spfile sid='*';

重启库后发现参数已修改但未到达预期效果。

对于instance尝试修改:

添加环境变量但是还未到达预期效果。

对于session尝试修改:

在这里插入图片描述
在这里插入图片描述

SQL> alter session set nls_database_parameters='yyyy/mm/dd hh24:mi:ss';

这里修改了后达到了预期效果,但只是对当前会话生效,新建的一个会话完全没有效果。
只能放大招了,加上一个触发器来变更会话。

实际生效的解决方案:

在system下创建一个触发器:

CREATE OR REPLACE TRIGGER LOGINTRG
 AFTER LOGON ON DATABASE
 BEGIN
EXECUTE IMMEDIATE 'ALTER SESSION SET  NLS_DATE_FORMAT = ''yyyy/mm/dd hh24:mi:ss''';
 END LOGINTRG;
/

代码很好懂,连接session后去执行 ALTER SESSION 来改变NLS_DATE_FORMAT 值。

总结

所以说这个to_Date在使用中要注意它的格式哦,to_Date不具备转换格式的功能!尽早修改代码!

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论