为什么 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
我在 运行 下面的查询中,当我将一个字符串转换为时间戳,然后尝试只获取时间时,它会显示 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