暂无图片
Oracle截取日期
我来答
分享
猫瞳映月
2022-07-08
Oracle截取日期
暂无图片 10M

DB版本:11.2.0.4

需求:截取max(gxsj)到YYYY-MM-DD HH24:MI:SS

gxsj是date类型

现在是这样写的

select substr(max(gxsj),1,19) from t1;

返回结果是这样的,格式乱掉了



有高手让我更改当前会话时间

ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS';

这样在当前会话输出是正常的YYYY-MM-DD HH24:MI:SS格式,但是我的SQL最终需要放在kettle程序里面调用,无法在kettle里面更改当前会话时间,请问有大神知道怎么处理吗

我来答
添加附件
收藏
分享
问题补充
7条回答
默认
最新
人生路不熟

即使不显示YYYY-MM-DD HH24:MI:SS这种格式,也是能够进行比较的,你在kettle中,又不需要观看输入的过程,输入->设置变量->输入


暂无图片 评论
暂无图片 有用 0
暂无图片
猫瞳映月
题主
2022-07-08
谢谢,就是这样的,非常感谢
刘贵宾

select substr(max(to_char(gxsj,'YYYY-MM-DD HH24:MI:SS')),1,19) from t1;

暂无图片 评论
暂无图片 有用 0
猫瞳映月
题主
2022-07-08
这样最后结果是字符类型的吧,因为要和其他值进行比较,所以最后应该是date类型才行,谢谢您
dbtiger

方法一:

SQL> show parameter nls_date_format;
SQL> alter system set nls_date_format='yyyy-mm-dd hh24:mi:ss' scope=spfile;

注意:

  • 修改数据库的参数,需要重启数据库后生效。
  • 这个是全局的,有时候影响非常大,所以必须格外小心,要确保不影响各个系统和应用的前提下修改!

方法二:

修改操作系统环境变量,如:Linux

export NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss';

注意:

  • 环境变量NLS_DATE_FORMAT必须和NLS_LANG一起设置,否则不会生效

另外,kettle也是可以设置时间格式的。祝你成功!

暂无图片 评论
暂无图片 有用 0
猫瞳映月
题主
2022-07-08
谢谢您的解答,我的数据库日期格式已经是yyyy-mm-dd hh24:mi:ss'这样的
刘贵宾

比较的时候将另一个值转为字符串进行比较不可以么?

暂无图片 评论
暂无图片 有用 0
dbtiger
2022-07-08
可以,但不推荐,因为kettl本身是java开发的,属于高级语言,性能方面就一般,加载上kettle属于抽取工具,对效率要求比较高,因此尽可能“预制”好时间格式之后再抽取,如果在SQL层面还消耗资源,如果数据量小没感觉,数据量大,性能影响就很大了。
刘贵宾
答主
2022-07-08
赵勇

DATE类型是包括年月日时分秒的,你的需求不需要做任何转换。而查询的结果只看到年月日,是受查询的工具影响的。例如,修改PLSQL DEVELOPER中的首选项,使其显示完整的日期数据。
图片.png

暂无图片 评论
暂无图片 有用 1
叶家钰
2022-07-08
kettle也得找到类似这种设置环境变量的位置。
猫瞳映月
题主
2022-07-08
谢谢老师,我的这种问题确实kettle工具影响的,我找找kettle相关的组件看看能不能解决
猫瞳映月

感谢每位为我耐心解答问题的人,给各位大神献上10墨值

暂无图片 评论
暂无图片 有用 1
猫瞳映月

@墨天轮  打赏墨值提示“检验表单重复提交时异常”,是系统Bug吗。。。

暂无图片 评论
暂无图片 有用 1
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏