diff --git a/src/ast/value.rs b/src/ast/value.rs index e6f139256d..a9c74d4a82 100644 --- a/src/ast/value.rs +++ b/src/ast/value.rs @@ -143,8 +143,10 @@ pub enum DateTimeField { Quarter, Time, Timezone, + TimezoneAbbr, TimezoneHour, TimezoneMinute, + TimezoneRegion, NoDateTime, } @@ -181,8 +183,10 @@ impl fmt::Display for DateTimeField { DateTimeField::Quarter => "QUARTER", DateTimeField::Time => "TIME", DateTimeField::Timezone => "TIMEZONE", + DateTimeField::TimezoneAbbr => "TIMEZONE_ABBR", DateTimeField::TimezoneHour => "TIMEZONE_HOUR", DateTimeField::TimezoneMinute => "TIMEZONE_MINUTE", + DateTimeField::TimezoneRegion => "TIMEZONE_REGION", DateTimeField::NoDateTime => "NODATETIME", }) } diff --git a/src/keywords.rs b/src/keywords.rs index 1dd43d430d..7655f323b7 100644 --- a/src/keywords.rs +++ b/src/keywords.rs @@ -653,8 +653,10 @@ define_keywords!( TIMESTAMPTZ, TIMETZ, TIMEZONE, + TIMEZONE_ABBR, TIMEZONE_HOUR, TIMEZONE_MINUTE, + TIMEZONE_REGION, TINYINT, TO, TOP, diff --git a/src/parser/mod.rs b/src/parser/mod.rs index b2646af6de..0358db9b99 100644 --- a/src/parser/mod.rs +++ b/src/parser/mod.rs @@ -1800,8 +1800,10 @@ impl<'a> Parser<'a> { Keyword::QUARTER => Ok(DateTimeField::Quarter), Keyword::TIME => Ok(DateTimeField::Time), Keyword::TIMEZONE => Ok(DateTimeField::Timezone), + Keyword::TIMEZONE_ABBR => Ok(DateTimeField::TimezoneAbbr), Keyword::TIMEZONE_HOUR => Ok(DateTimeField::TimezoneHour), Keyword::TIMEZONE_MINUTE => Ok(DateTimeField::TimezoneMinute), + Keyword::TIMEZONE_REGION => Ok(DateTimeField::TimezoneRegion), _ => self.expected("date/time field", next_token), }, _ => self.expected("date/time field", next_token), diff --git a/tests/sqlparser_common.rs b/tests/sqlparser_common.rs index eadc176962..c23b1c9230 100644 --- a/tests/sqlparser_common.rs +++ b/tests/sqlparser_common.rs @@ -2238,8 +2238,10 @@ fn parse_extract() { verified_stmt("SELECT EXTRACT(MILLISECONDS FROM d)"); verified_stmt("SELECT EXTRACT(QUARTER FROM d)"); verified_stmt("SELECT EXTRACT(TIMEZONE FROM d)"); + verified_stmt("SELECT EXTRACT(TIMEZONE_ABBR FROM d)"); verified_stmt("SELECT EXTRACT(TIMEZONE_HOUR FROM d)"); verified_stmt("SELECT EXTRACT(TIMEZONE_MINUTE FROM d)"); + verified_stmt("SELECT EXTRACT(TIMEZONE_REGION FROM d)"); verified_stmt("SELECT EXTRACT(TIME FROM d)"); let res = parse_sql_statements("SELECT EXTRACT(JIFFY FROM d)");