diff --git a/src/ast/value.rs b/src/ast/value.rs index 49c0b5d7a..9a356e8bf 100644 --- a/src/ast/value.rs +++ b/src/ast/value.rs @@ -91,6 +91,8 @@ pub enum DateTimeField { Millennium, Millisecond, Milliseconds, + Nanosecond, + Nanoseconds, Quarter, Timezone, TimezoneHour, @@ -123,6 +125,8 @@ impl fmt::Display for DateTimeField { DateTimeField::Millennium => "MILLENNIUM", DateTimeField::Millisecond => "MILLISECOND", DateTimeField::Milliseconds => "MILLISECONDS", + DateTimeField::Nanosecond => "NANOSECOND", + DateTimeField::Nanoseconds => "NANOSECONDS", DateTimeField::Quarter => "QUARTER", DateTimeField::Timezone => "TIMEZONE", DateTimeField::TimezoneHour => "TIMEZONE_HOUR", diff --git a/src/keywords.rs b/src/keywords.rs index 1fc15fda0..e87062846 100644 --- a/src/keywords.rs +++ b/src/keywords.rs @@ -361,6 +361,8 @@ define_keywords!( MSCK, MULTISET, MUTATION, + NANOSECOND, + NANOSECONDS, NATIONAL, NATURAL, NCHAR, diff --git a/src/parser.rs b/src/parser.rs index 45c472acd..63d4e4d92 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -1210,6 +1210,8 @@ impl<'a> Parser<'a> { Keyword::MILLENNIUM => Ok(DateTimeField::Millennium), Keyword::MILLISECOND => Ok(DateTimeField::Millisecond), Keyword::MILLISECONDS => Ok(DateTimeField::Milliseconds), + Keyword::NANOSECOND => Ok(DateTimeField::Nanosecond), + Keyword::NANOSECONDS => Ok(DateTimeField::Nanoseconds), Keyword::QUARTER => Ok(DateTimeField::Quarter), Keyword::TIMEZONE => Ok(DateTimeField::Timezone), Keyword::TIMEZONE_HOUR => Ok(DateTimeField::TimezoneHour), @@ -1343,6 +1345,8 @@ impl<'a> Parser<'a> { Keyword::MILLENNIUM, Keyword::MILLISECOND, Keyword::MILLISECONDS, + Keyword::NANOSECOND, + Keyword::NANOSECONDS, Keyword::QUARTER, Keyword::TIMEZONE, Keyword::TIMEZONE_HOUR, diff --git a/tests/sqlparser_common.rs b/tests/sqlparser_common.rs index addc68e47..85cde27f5 100644 --- a/tests/sqlparser_common.rs +++ b/tests/sqlparser_common.rs @@ -1740,6 +1740,9 @@ fn parse_extract() { verified_stmt("SELECT EXTRACT(HOUR FROM d)"); verified_stmt("SELECT EXTRACT(MINUTE FROM d)"); verified_stmt("SELECT EXTRACT(SECOND FROM d)"); + verified_stmt("SELECT EXTRACT(MILLISECOND FROM d)"); + verified_stmt("SELECT EXTRACT(MICROSECOND FROM d)"); + verified_stmt("SELECT EXTRACT(NANOSECOND FROM d)"); verified_stmt("SELECT EXTRACT(CENTURY FROM d)"); verified_stmt("SELECT EXTRACT(DECADE FROM d)"); verified_stmt("SELECT EXTRACT(DOW FROM d)");