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),