This is an automated email from the ASF dual-hosted git repository.

dheres pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/arrow-datafusion.git


The following commit(s) were added to refs/heads/master by this push:
     new c59a76754 Add additional DATE_PART units (#3503)
c59a76754 is described below

commit c59a76754e7e45063cb51c273f2a53aa325676a4
Author: Jon Mease <[email protected]>
AuthorDate: Fri Sep 16 10:03:08 2022 -0400

    Add additional DATE_PART units (#3503)
    
    * Add dow support to date_part
    
    * Add doy support to date_part
    
    * Add quarter support to date_part
---
 datafusion/core/tests/sql/expr.rs                    | 15 +++++++++++++++
 datafusion/physical-expr/src/datetime_expressions.rs |  3 +++
 2 files changed, 18 insertions(+)

diff --git a/datafusion/core/tests/sql/expr.rs 
b/datafusion/core/tests/sql/expr.rs
index 3ca2c4738..a5288d92a 100644
--- a/datafusion/core/tests/sql/expr.rs
+++ b/datafusion/core/tests/sql/expr.rs
@@ -1233,6 +1233,11 @@ async fn test_extract_date_part() -> Result<()> {
         "EXTRACT(year FROM to_timestamp('2020-09-08T12:00:00+00:00'))",
         "2020"
     );
+    test_expression!("date_part('QUARTER', CAST('2000-01-01' AS DATE))", "1");
+    test_expression!(
+        "EXTRACT(quarter FROM to_timestamp('2020-09-08T12:00:00+00:00'))",
+        "3"
+    );
     test_expression!("date_part('MONTH', CAST('2000-01-01' AS DATE))", "1");
     test_expression!(
         "EXTRACT(month FROM to_timestamp('2020-09-08T12:00:00+00:00'))",
@@ -1248,6 +1253,16 @@ async fn test_extract_date_part() -> Result<()> {
         "EXTRACT(day FROM to_timestamp('2020-09-08T12:00:00+00:00'))",
         "8"
     );
+    test_expression!("date_part('DOY', CAST('2000-01-01' AS DATE))", "1");
+    test_expression!(
+        "EXTRACT(doy FROM to_timestamp('2020-09-08T12:00:00+00:00'))",
+        "252"
+    );
+    test_expression!("date_part('DOW', CAST('2000-01-01' AS DATE))", "6");
+    test_expression!(
+        "EXTRACT(dow FROM to_timestamp('2020-09-08T12:00:00+00:00'))",
+        "2"
+    );
     test_expression!("date_part('HOUR', CAST('2000-01-01' AS DATE))", "0");
     test_expression!(
         "EXTRACT(hour FROM to_timestamp('2020-09-08T12:03:03+00:00'))",
diff --git a/datafusion/physical-expr/src/datetime_expressions.rs 
b/datafusion/physical-expr/src/datetime_expressions.rs
index a70227379..0214d1bfb 100644
--- a/datafusion/physical-expr/src/datetime_expressions.rs
+++ b/datafusion/physical-expr/src/datetime_expressions.rs
@@ -449,9 +449,12 @@ pub fn date_part(args: &[ColumnarValue]) -> 
Result<ColumnarValue> {
 
     let arr = match date_part.to_lowercase().as_str() {
         "year" => extract_date_part!(array, temporal::year),
+        "quarter" => extract_date_part!(array, temporal::quarter),
         "month" => extract_date_part!(array, temporal::month),
         "week" => extract_date_part!(array, temporal::week),
         "day" => extract_date_part!(array, temporal::day),
+        "doy" => extract_date_part!(array, temporal::doy),
+        "dow" => extract_date_part!(array, temporal::num_days_from_sunday),
         "hour" => extract_date_part!(array, temporal::hour),
         "minute" => extract_date_part!(array, temporal::minute),
         "second" => extract_date_part!(array, temporal::second),

Reply via email to