[ https://issues.apache.org/jira/browse/DRILL-8340?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17622957#comment-17622957 ]
ASF GitHub Bot commented on DRILL-8340: --------------------------------------- jnturton commented on code in PR #2689: URL: https://github.com/apache/drill/pull/2689#discussion_r1002900480 ########## contrib/udfs/src/main/java/org/apache/drill/exec/udfs/DateFunctions.java: ########## @@ -140,8 +143,77 @@ public void eval() { java.time.format.DateTimeFormatter formatter = java.time.format.DateTimeFormatter.ofPattern(format); java.time.LocalDateTime dateTime = java.time.LocalDateTime.parse(inputDate, formatter); - java.time.LocalDateTime td = org.apache.drill.exec.udfs.NearestDateUtils.getDate(dateTime, intervalString); + java.time.LocalDateTime td = DateConversionUtils.getDate(dateTime, intervalString); out.value = td.atZone(java.time.ZoneId.of("UTC")).toInstant().toEpochMilli(); } } + + @FunctionTemplate(names = {"yearweek","year_week"}, + scope = FunctionTemplate.FunctionScope.SIMPLE, + nulls = FunctionTemplate.NullHandling.NULL_IF_NULL) + public static class YearWeekFunction implements DrillSimpleFunc { + @Param + VarCharHolder inputHolder; + + @Output + IntHolder out; + + @Override + public void setup() { + // noop + } + + @Override + public void eval() { + String input = org.apache.drill.exec.expr.fn.impl.StringFunctionHelpers.toStringFromUTF8(inputHolder.start, inputHolder.end, inputHolder.buffer); + java.time.LocalDateTime dt = org.apache.drill.exec.udfs.DateUtilFunctions.getTimestampFromString(input); + int week = dt.get(java.time.temporal.IsoFields.WEEK_OF_WEEK_BASED_YEAR); + int year = dt.getYear(); + out.value = (year * 100) + week; + } + } + + @FunctionTemplate(names = {"yearweek","year_week"}, + scope = FunctionTemplate.FunctionScope.SIMPLE, + nulls = FunctionTemplate.NullHandling.NULL_IF_NULL) + public static class YearWeekFromDateFunction implements DrillSimpleFunc { + @Param + DateHolder inputHolder; + + @Output + IntHolder out; + + @Override + public void setup() { + // noop + } + + @Override + public void eval() { + out.value = org.apache.drill.exec.udfs.DateUtilFunctions.getYearWeek(inputHolder.value); + } + } + + @FunctionTemplate(names = {"time_stamp", "timestamp"}, Review Comment: > I was modeling the function names after MySQL which has a timestamp and date functions which take a string as input and return the respective data converted into a temporal format. This way a user of MySQL wouldn't have to look up new function names. Yes I do see, and support, the intent but only up to the point that the names chosen by the system inspiring the functions plug harmoniously into what we have. `time_stamp` is a spelling that is foreign to Drill (and to ANSI SQL) and Drill already does something else with `timestamp` today: ``` apache drill> select `timestamp`('1970-01-01'); EXPR$0 1970-01-01 00:00:00.0 1 row selected (1.969 seconds) ``` Like you say, if `to_timestamp(date_str, 'auto')` doesn't turn that implentation into a monstrosity then maybe that's going to be the nicest option here. Hopefully your Util class could be used to prevent the eval method from growing very long... > Add Additional Date Manipulation Functions (Part 1) > --------------------------------------------------- > > Key: DRILL-8340 > URL: https://issues.apache.org/jira/browse/DRILL-8340 > Project: Apache Drill > Issue Type: Improvement > Components: Functions - Drill > Affects Versions: 1.20.2 > Reporter: Charles Givre > Assignee: Charles Givre > Priority: Major > Fix For: 2.0.0 > > > This PR adds several utility functions to facilitate working with dates and > times. These are modeled after the date/time functionality in MySQL. > Specifically this adds: > * YEARWEEK(<date>): Returns an int of year week. IE (202002) > * TIME_STAMP(<date string>): Converts most anything that looks like a date > string into a timestamp. -- This message was sent by Atlassian Jira (v8.20.10#820010)