当前位置: 首页 > 知识库问答 >
问题:

Oracle查询,可在EST时区节省日光

卢黎明
2023-03-14

我正在开发一个应用程序,其中:

  • 身份验证令牌从其创建时间起有2小时的到期时间。
  • 存储在DB中的令牌创建和到期时间是本地日期/时间(即EST)
  • 在DST开始前2小时内生成的代币,在时钟向前移动1小时后过期。
  • 例如:如果令牌是在2021年3月14日凌晨1:30创建的,那么它的创建和到期时间将在DB中分别设置为“2021-03-14 01:30:00”和“2021-03-14 03:30:00”。现在,假设DST从下午2点开始,服务器时间将在那一刻为3:00,并且应该在3:30之前有效的令牌现在将在2:30到期

目前我使用的查询在美国开始日光节约时开始失败。下面的查询用于从DB获取活动令牌:

SELECT * FROM tbl1  WHERE TOKEN_VALUE = 'xyztoken' AND 
  TOKEN_EXPIRATION > CURRENT_TIMESTAMP;

有没有办法调整上面的查询,以便在美国开始日光节约后返回正确的结果。

TOKEN_EXPIRATION和TOKEN_CREATION字段在TIMESTAMP

共有1个答案

史高阳
2023-03-14

假设您的TOKEN_EXPIRATION存储为DATE数据类型,其中日期/时间表示EST时区中的时间,那么您可以使用以下方法将其转换回带时区的时间戳

SELECT *
FROM   tbl1
WHERE  TOKEN_VALUE = 'xyztoken'
AND    FROM_TZ( CAST( TOKEN_EXPIRATION AS TIMESTAMP ), 'EST5EDT' ) > CURRENT_TIMESTAMP;

如果是时间戳列,则可以跳过转换

SELECT *
FROM   tbl1
WHERE  TOKEN_VALUE = 'xyztoken'
AND    FROM_TZ( TOKEN_EXPIRATION, 'EST5EDT' ) > CURRENT_TIMESTAMP;
 类似资料:
  • 问题内容: 我有以下查询: 我有以下准备好的声明 如果我检查数据库,我发现它只插入今天的日期而不是时间,因此它将是: 我还应该投入些什么来打发时间? 问题答案: 您应该使用 Timestamp 和 setTimestamp* 方法来代替 Date 。 **** * 实际上,您必须执行以下操作: ....

  • 问题内容: 我正在使用Oracle 11g标准版。 我想将用户正在执行的所有SQL查询记录到表中。 如何才能做到这一点? 问题答案: 如果您使用的是现代版本的数据库(9i或更高版本),并且您拥有企业版许可证,则可以使用细粒度审核。它使我们能够通过已定义的策略以非常低的粒度审核用户查询。 要捕获SQL文本并绑定变量,您需要在添加FGA策略时适当设置AUDIT_TRAIL参数。 了解更多。 “我使用的

  • 我对Oracle SQL中的以下查询有疑问: 当我运行它时,结果如下所示:2015年11月10日。根据我在Oracle文档中读到的内容,YYYY应该转换为4位数的年份,但它转换为2位数的年份。为什么会这样?

  • 问题内容: 我有一个带有日期/时间值的字段,如下所示: 在UTC中。在查询中如何将其转换为EST? 我正在尝试类似的操作,但是会引发错误。 问题答案: 我必须对其进行一些微调,以使其在我的数据库上工作,但这是可行的: 关键是“在时区”语法。

  • 如何将EST时区日期(已转换并获取字符串)转换为带有时区的日期格式?我尝试更改时区,得到了字符串格式的完美日期时间,但当我将该字符串日期解析为日期格式时,它为我提供了本地Android系统时区时间。 提前感谢您的帮助。 它以字符串形式给出最新的日期格式(当前日期)。它给我的是格式日期(currentdate)

  • 我的日期是2013年12月11日星期三东部标准时间00:00:00这种格式。我想用JavaScript将此日期转换为格式。如何在不改变时区的情况下进行转换。 我搜索了这个解决方案,发现下面的解决方案: 但我认为这不是一个好的解决方案,因为如果我的日期字符串时区从EST更改为IST或任何其他时区,它将不起作用。 是否有将日期转换为所需格式的好解决方案? 提前感谢。 编辑:如果有任何一个使用JQuer