Sql 如何将Sysdate转换为GMT?
所以场景很简单,我需要编写一个函数,其中将提供一个日期,这将是来自数据库的sysdate,函数的返回值应为GMT格式。此功能可根据业务场景跨不同数据库中的不同时区使用。我们需要注意夏令时的概念和其他事情,它应该返回GMT日期Sql 如何将Sysdate转换为GMT?,sql,oracle,timestamp-with-timezone,Sql,Oracle,Timestamp With Timezone,所以场景很简单,我需要编写一个函数,其中将提供一个日期,这将是来自数据库的sysdate,函数的返回值应为GMT格式。此功能可根据业务场景跨不同数据库中的不同时区使用。我们需要注意夏令时的概念和其他事情,它应该返回GMT日期 请提供最佳建议。为了更好地理解,让我们从Oracle时区支持开始。时区信息有三种不同的来源: 操作系统的时区(在数据库启动时设置) 数据库时区(在数据库创建时设置) 会话的“本地”时区(可通过ALTER session更改) Oracle日期时间数据类型: 日期:包括
请提供最佳建议。为了更好地理解,让我们从Oracle时区支持开始。时区信息有三种不同的来源:
- 操作系统的时区(在数据库启动时设置)
- 数据库时区(在数据库创建时设置)
- 会话的“本地”时区(可通过
更改)ALTER session
:包括日期、小时、分钟和整秒,但不包括时区信息李>日期
:也可以包括小数秒,但不包括时区信息李>时间戳
:包括时区信息,可以是UTC('-4:00')的偏移量,也可以是指定时区('Europe/Paris')。偏移不会针对夏令时进行调整,而指定的时区会进行调整带时区的时间戳
:该值在存储时转换为数据库时区,在选择时转换为会话时区带本地时区的时间戳
:基于操作系统时区的SYSDATE
(时间为秒)李>DATE
:基于操作系统时区的带时区的SYSTIMESTAMP
时间戳李>
:基于会话时区的当前日期
(时间为秒)李>日期
:基于会话时区的带时区的CURRENT_TIMESTAMP
时间戳李>
:基于会话时区的LOCALTIMESTAMP
李>TIMESTAMP
将返回带有时区的时区“GMT”
时间戳
将返回一个SYS\u EXTRACT\u UTC
时间戳
时间戳
作为输入,然后需要将输出转换为日期
因此,以下任何一项都将为您提供GMT时区中的DATE
值:
select
cast(systimestamp at time zone 'gmt' as date),
cast(current_timestamp at time zone 'gmt' as date),
cast(localtimestamp at time zone 'gmt' as date),
cast(sys_extract_utc(systimestamp) as date),
cast(sys_extract_utc(current_timestamp) as date),
cast(sys_extract_utc(localtimestamp) as date)
from dual;
注意:不要将SYSDATE传递给函数!让函数使用一个内置的时间戳函数。如果将日期传递给函数,函数必须假定它所属的时区。Hi Stew“时区时间戳:包括时区信息,可以是UTC('-4:00')的偏移量,也可以是指定时区('Europe/Paris')。偏移量不根据夏令时进行调整,指定时区会进行调整。”你能提供一些关于它的更多信息吗?如果我使用cast(时区'GMT'作为日期的systimestamp)计算GMT,那么夏令时将对它产生影响?当我说:“偏移量不根据夏令时调整,指定的时区会调整”,这是一般信息。在这种特殊情况下,它没有实际的区别。使用命名时区时,Oracle会从其自己的“时区文件”中获取夏令时信息。调用SYSTIMESTAMP时,操作系统应处理夏令时,然后提供正确的偏移量。无论哪种方式,结果都是正确的,可以转换为GMT。