sql - 如何转换时间戳的时区以便在 Oracle DB 中进行比较?

标签 sql database oracle timezone timestamp

我们使用的是 Oracle 11g,并且有一个带有时间戳列的表,该列不包含时区(简单定义为 TIMESTAMP)。时区写在不同的列中。

我希望能够在考虑时区的同时使用“max”函数。
可能有一个可以轻松转换时区的函数,但我只是不知道。

我希望能够做这样的事情:

SELECT max(covert_to_timezone(my_timestamp, my_timezone, 'GMT')) FROM my_table

我怎样才能做到这一点?

==================

解决方案:根据 Ajith Sasidharan 的回答:

SELECT max(from_tz(my_timestamp, my_timezone) at time zone '0:00') FROM my_table

更新:如果您想比较日期,只需使用“cast”即可:

SELECT max(from_tz(cast(my_date as timestamp), my_timezone) at time zone '0:00') FROM my_table

顺便说一句,现在我收到“ORA 01878”错误,这意味着我们的表包含无效时间(DST 狗屎)。

最佳答案

我猜你想要一个这样的函数::

select to_char((from_tz(to_timestamp(to_char(DATABASE_DATE, 'YYYY-MM-DD HH:MI:SS PM'), 'YYYY-MM-DD HH:MI:SS PM') ,'America/New_York')
    at time zone 'America/Los_Angeles'),'YYYY-MM-DD HH:MI:SS PM TZD') as localtime
    from table

关于sql - 如何转换时间戳的时区以便在 Oracle DB 中进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13902859/

相关文章:

sql - 以 Oracle 10g 为中心

sql - 解析xml时如何使用 "cross apply"?

php - 选择查询的输出用作 php 中其他查询的输入

java - 在 Sqlite 中仅创建和更新单个值

sql - Oracle - 仅从列中选择最大值

oracle - 如何在 PL/SQL 中将一纳秒添加到时间戳

sql - 如何将查询中的日期与上个月的日期进行比较

mysql - 将 MySQL JSON 列数组读取为行

sql - 用可能不存在的记录连接表

MySQL通过表连接获取数据