@@ -610,21 +610,51 @@ impl<'a> Parser<'a> {
610610 // operator and interval qualifiers. EXTRACT supports a wider set of
611611 // date/time fields than interval qualifiers, so this function may need to
612612 // be split in two.
613+ // https://docs.snowflake.com/en/sql-reference/functions-date-time.html#supported-date-and-time-parts
613614 pub fn parse_date_time_field ( & mut self ) -> Result < DateTimeField , ParserError > {
614615 match self . next_token ( ) {
615616 Token :: Word ( w) => match w. keyword {
616- Keyword :: YEAR => Ok ( DateTimeField :: Year ) ,
617+ Keyword :: YEAR
618+ | Keyword :: Y
619+ | Keyword :: YY
620+ | Keyword :: YYY
621+ | Keyword :: YYYY
622+ | Keyword :: YR
623+ | Keyword :: YEARS
624+ | Keyword :: YRS => Ok ( DateTimeField :: Year ) ,
617625 Keyword :: YEAROFWEEK => Ok ( DateTimeField :: YearOfWeek ) ,
618626 Keyword :: YEAROFWEEKISO => Ok ( DateTimeField :: YearOfWeekIso ) ,
619- Keyword :: QUARTER => Ok ( DateTimeField :: Quarter ) ,
620- Keyword :: MONTH => Ok ( DateTimeField :: Month ) ,
621- Keyword :: WEEK => Ok ( DateTimeField :: Week ) ,
622- Keyword :: WEEKOFYEAR => Ok ( DateTimeField :: WeekOfYear ) ,
623- Keyword :: WEEKISO => Ok ( DateTimeField :: WeekIso ) ,
624- Keyword :: DAY | Keyword :: DAYOFMONTH => Ok ( DateTimeField :: Day ) ,
625- Keyword :: DAYOFWEEK => Ok ( DateTimeField :: DayOfWeek ) ,
626- Keyword :: DAYOFWEEKISO => Ok ( DateTimeField :: DayOfWeekIso ) ,
627- Keyword :: DAYOFYEAR => Ok ( DateTimeField :: DayOfYear ) ,
627+ Keyword :: QUARTER
628+ | Keyword :: Q
629+ | Keyword :: QTR
630+ | Keyword :: QTRS
631+ | Keyword :: QUARTERS => Ok ( DateTimeField :: Quarter ) ,
632+ Keyword :: MONTH | Keyword :: MM | Keyword :: MON | Keyword :: MONS | Keyword :: MONTHS => {
633+ Ok ( DateTimeField :: Month )
634+ }
635+ Keyword :: WEEK
636+ | Keyword :: W
637+ | Keyword :: WK
638+ | Keyword :: WEEKOFYEAR
639+ | Keyword :: WOY
640+ | Keyword :: WY => Ok ( DateTimeField :: Week ) ,
641+ Keyword :: WEEKISO
642+ | Keyword :: WEEK_ISO
643+ | Keyword :: WEEKOFYEARISO
644+ | Keyword :: WEEKOFYEAR_ISO => Ok ( DateTimeField :: WeekIso ) ,
645+ Keyword :: DAY | Keyword :: D | Keyword :: DD | Keyword :: DAYS | Keyword :: DAYOFMONTH => {
646+ Ok ( DateTimeField :: Day )
647+ }
648+ Keyword :: DAYOFWEEK | Keyword :: WEEKDAY | Keyword :: DOW | Keyword :: DW => {
649+ Ok ( DateTimeField :: DayOfWeek )
650+ }
651+ Keyword :: DAYOFWEEKISO
652+ | Keyword :: WEEKDAY_ISO
653+ | Keyword :: DOW_ISO
654+ | Keyword :: DW_ISO => Ok ( DateTimeField :: DayOfWeekIso ) ,
655+ Keyword :: DAYOFYEAR | Keyword :: YEARDAY | Keyword :: DOY | Keyword :: DY => {
656+ Ok ( DateTimeField :: DayOfYear )
657+ }
628658 Keyword :: HOUR => Ok ( DateTimeField :: Hour ) ,
629659 Keyword :: MINUTE => Ok ( DateTimeField :: Minute ) ,
630660 Keyword :: SECOND => Ok ( DateTimeField :: Second ) ,
0 commit comments