当我将字符串转换为时间戳,然后尝试仅获取时间时,我正在运行以下查询,它将显示时间为1小时。但是,当我尝试提取小时数时,它只能正常工作。
我尝试了以下查询来了解为什么会这样。
SELECT Cast ('2019-10-13 16:00:01' AS TIMESTAMP(0)) AS a,
Cast('08:00:00' AS TIME(0)) AS JiraStart,
Cast(a AS TIME(0)) AS A_time,
Extract(hour FROM jirastart) AS JE_hour,
Extract(hour FROM a) AS A_hour;
我希望A_time为'16:00:01',但这是我得到的:'15:00:01'
您的会话设置为夏令时,并且当您投射到没有时区的时间时,它将假定当前位移并将其调整为标准时间。
您可以使用时区转换为时间/时间戳记:
SET TIME Zone 'europe central';
SELECT Cast ('2017-10-13 16:00:01' AS TIMESTAMP(0)) AS a,
Cast(a AS TIME(0)) AS A_time,
a AT LOCAL AS A_local,
Cast(a AS TIME(0)) AT LOCAL AS A_time_local,
Cast ('2019-10-13 16:00:01' AS TIMESTAMP(0) WITH TIME Zone) AS a_TZ,
Cast(a_TZ AS TIME(0) WITH TIME Zone) AS time_TZ;
a A_time A_local A_time_local a_TZ time_TZ
------------------- -------- ------------------------- -------------- ------------------------- --------------
2017-10-13 16:00:01 15:00:01 2017-10-13 16:00:01+02:00 15:00:01+01:00 2019-10-13 16:00:01+02:00 16:00:01+02:00
或将会话切换到固定时区:
SET TIME Zone 0;
SELECT Cast ('2017-10-13 16:00:01' AS TIMESTAMP(0)) AS a,
Cast(a AS TIME(0)) AS A_time,
a AT LOCAL AS A_TZ,
Cast(a AS TIME(0)) AT LOCAL AS A_timeTZ;
a A_time A_TZ A_timeTZ
------------------- -------- ------------------------- --------------
2017-10-13 16:00:01 16:00:01 2017-10-13 16:00:01+00:00 16:00:01+00:00