首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何比较oracle中的时间戳(6)列和systimestamp

如何比较oracle中的时间戳(6)列和systimestamp
EN

Stack Overflow用户
提问于 2016-11-19 07:40:39
回答 1查看 1.6K关注 0票数 0

我希望将时间戳列值与systimestamp值进行比较。我的表包含两列from_date和to_date,它们的数据类型为时间戳(6)。我想检查一下这样的东西

  1. from_date和thru_date之间的系统标记

在检查systimestamp时,返回值带有时区,但是from_date和thru_date列值没有时区。

从dual中选择systimestamp;- 11/19/2016 03:35:55.042420000 PM +08:00

和from_date & thru_date喜欢的08/03/201506:09:56.941255000上午

请告诉我如何实现这一比较?我可以使用LOCALTIMESTAMP而不是SYSTIMESTAMP吗?或者在比较之前,我必须在from_date和to_date列上使用to_date函数?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-19 13:58:25

比较而言,Oracle必须执行隐式强制转换。我刚刚做了一个测试,Oracle在内部运行

systimestamp between CAST(from_date AS TIMESTAMP WITH TIME ZONE) and CAST(thru_date AS TIMESTAMP WITH TIME ZONE)

这相当于

systimestamp between FROM_TZ(from_date, SESSIONTIMEZONE) and FROM_TZ(thru_date, SESSIONTIMEZONE)

如果您当前的SESSIONTIMEZONE与数据库服务器操作系统的时区不同,查询将返回错误的结果。

为了得到正确的结果,您可以使用以下任何一种表达式:

代码语言:javascript
复制
CAST(systimestamp AS TIMESTAMP) between from_date and thru_date

systimestamp between FROM_TZ(from_date, EXTRACT(TIMEZONE_REGION FROM SYSTIMESTAMP)) 
       and FROM_TZ(thru_date, EXTRACT(TIMEZONE_REGION FROM SYSTIMESTAMP))

systimestamp between FROM_TZ(from_date, TO_CHAR(SYSTIMESTAMP, 'TZR')) 
       and FROM_TZ(thru_date, TO_CHAR(SYSTIMESTAMP, 'TZR'))

systimestamp between FROM_TZ(from_date, TO_CHAR(SYSTIMESTAMP, 'TZH:TZM')) 
       and FROM_TZ(thru_date, TO_CHAR(SYSTIMESTAMP, 'TZH:TZM'))

EXTRACT(TIMEZONE_REGION FROM SYSTIMESTAMP)可能会失败,取决于您的服务器设置。

注意,不要使用DBTIMEZONE而不是TO_CHAR(SYSTIMESTAMP, 'TZR')DBTIMEZONE不同于数据库服务器操作系统的时区。SYSTIMESTAMP的时区是在数据库服务器操作系统的时区,而不是DBTIMEZONE

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40690436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档