Presto SQL:使用由于查询而来的时区字符串更改时区不起作用

我正在通过Mode Analytics Platform连接到AWS Athena,并使用其查询引擎(基于Presto

0.172)查询表。该表public.zones将时区信息存储在称为time_zone我感兴趣的某些区域的列中,存储为varchar

例如,如果我输入:

SELECT time_zone 

FROM public.zones

LIMIT 4;

我得到(如预期):

time_zone

----------

US/Pacific

US/Eastern

US/Eastern

US/Eastern

我可以运行以下测试查询:

SELECT 

timestamp '2017-06-01 12:34:56.789' AT TIME ZONE 'US/Eastern' AS time_eastern,

time_zone

FROM public.zones

LIMIT 4;

我得到(如预期)

time_eastern                        time_zone

---------------------------------- ----------

2017-06-01 08:34:56.789 US/Eastern US/Pacific

2017-06-01 08:34:56.789 US/Eastern US/Eastern

2017-06-01 08:34:56.789 US/Eastern US/Eastern

2017-06-01 08:34:56.789 US/Eastern US/Eastern

现在,我想'2017-06-01

12:34:56.789'在从时区表中查询的不同时区中代表相同的时间字符串。我希望以下查询能够运行。(它在PostgreSQL上运行)。

SELECT 

timestamp '2017-06-01 12:34:56.789' AT TIME ZONE time_zone AS time_custom,

time_zone

FROM public.zones

LIMIT 4;

我收到以下错误:

[Simba][AthenaJDBC](100071) An error has been thrown from the AWS Athena client. 

line 2:52: no viable alternative at input 'TIME ZONE time_zone'

这是为什么在Presto SQL / AWS Athena查询引擎中不起作用的原因是什么?

谁能建议任何解决方法,或者我的语法错误是什么?

回答:

AT TIME ZONE 仅接受文字或间隔。

with_timezone为此,Presto

320会添加(用于timestamp值)at_timezone(用于timestamp

with time zone值)。

如果您使用的是Presto的旧版本(例如撰写本文时的Athena),则可以使用以下解决方法。您可以将时间戳记值转换为varchar,与zone串联并转换为timestamp

with time zone

presto> select cast(cast(t as varchar) || ' ' || zone as timestamp with time zone)

from (values (timestamp '2017-06-01 12:34:56.789', 'US/Pacific')) x(t, zone);

_col0

---------------------------------------------

2017-06-01 12:34:56.789 America/Los_Angeles

(1 row)

(注意:已在Presto 320上进行了测试。如果该功能尚不能在Athena上使用,请告诉我。)

以上是 Presto SQL:使用由于查询而来的时区字符串更改时区不起作用 的全部内容, 来源链接: utcz.com/qa/409818.html

回到顶部