为什么Teradata总是显示的时间比时间戳显示的时间少一小时?

问题描述 投票:0回答:1

当我将字符串转换为时间戳,然后尝试仅获取时间时,我正在运行以下查询,它将显示时间为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'

Result

teradata
1个回答
0
投票

您的会话设置为夏令时,并且当您投射到没有时区的时间时,它将假定当前位移并将其调整为标准时间。

您可以使用时区转换为时间/时间戳记:

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
© www.soinside.com 2019 - 2024. All rights reserved.