如何在 sql 查询中将时区更改为 MST?

how to change the time zone to MST in sql query?

我有一个以 MST 格式获取时区的查询。但是对于几行它给出了 PT.

我使用的查询是 -

SELECT   cca.last_update_date,
to_char(cast(cast(cca.last_update_date as timestamp with time zone) at time zone 'MST' as timestamp),'HH:MI:SS AM') mst_time
FROM     CMP_CWB_AUDIT CCA

任何人都可以帮助我如何在 sql 查询中将时间格式更改为 MST 吗?

TIMESTAMP 数据类型没有时区。但是,如果您知道 last_update_date 在 MST 中,则可以使用 FROM_TZ 函数将其转换为 TIMESTAMP WITH TIME ZONE

select from_tz( cca.last_update_date, 'MST' ) from CMP_CWB_AUDIT cca

如果该列与 MST 处于不同的时区,您可以使用 AT TIME ZONE 子句转换它:

select from_tz( cca.last_update_date, 'UTC' ) at time zone 'MST' from CMP_CWB_AUDIT cca

假设 last_update_date 的时区在 PST 中给出,您可以简单地 运行

SELECT cca.last_update_date,
   from_tz(cca.last_update_date, 'PST') at time zone 'MST' AS mst_time
FROM CMP_CWB_AUDIT CCA

当你 运行 cast(last_update_date as timestamp with time zone) 那么 Oracle 实际上在做

from_tz(last_update_date, SESSIONTIMEZONE)

如果您当前的会话时区是 PST,结果将是正确的。但是,由于 SESSIONTIMEZONE 可能随时更改,结果可能是错误的。

运行 CAST(<TIMESTAMP WITH TIME ZONE> AS TIMESTAMP) 当你的输出是 'HH:MI:SS AM' 时毫无意义,它不会改变任何东西。