in sql_utils/public/functions/date_time_util.cc [2607:2655]
absl::Status ExtractFromTime(DateTimestampPart part, const TimeValue& time,
int32_t* output) {
if (!time.IsValid()) {
return MakeEvalError() << "Invalid time value: " << time.DebugString();
}
switch (part) {
case YEAR:
case MONTH:
case DAY:
case DAYOFWEEK:
case DAYOFYEAR:
case QUARTER:
case DATE:
case WEEK:
case WEEK_MONDAY:
case WEEK_TUESDAY:
case WEEK_WEDNESDAY:
case WEEK_THURSDAY:
case WEEK_FRIDAY:
case WEEK_SATURDAY:
case DATETIME:
case TIME:
return MakeEvalError()
<< "Unsupported DateTimestampPart " << DateTimestampPart_Name(part)
<< " to extract from time";
case HOUR:
*output = time.Hour();
break;
case MINUTE:
*output = time.Minute();
break;
case SECOND:
*output = time.Second();
break;
case MILLISECOND:
*output = time.Microseconds() / 1000;
break;
case MICROSECOND:
*output = time.Microseconds();
break;
case NANOSECOND:
*output = time.Nanoseconds();
break;
default:
return MakeEvalError()
<< "Unexpected DateTimestampPart " << DateTimestampPart_Name(part);
}
return absl::OkStatus();
}