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

why teradata always show time one hour less than what shown in timestamp?

我在 运行 下面的查询中,当我将一个字符串转换为时间戳,然后尝试只获取时间时,它会显示 time-1hour。但是,当我尝试仅提取小时数时,它工作正常。

我尝试了以下查询来理解为什么会这样。

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

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

您可以转换为 time/timestamps 时区:

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