Функция to_date

Область применения:флажок Databricks SQL флажок Databricks Runtime

Возвращает значение expr, приведенное к дате, с применением необязательного форматирования.

Синтаксис

to_date(expr [, fmt] )

Аргументы

  • expr: строковое (STRING) выражение, представляющее дату.
  • fmt: необязательное выражение типа STRING для форматирования.

Возвраты

Значение DATE.

Если указан аргумент fmt, он должен соответствовать шаблонам даты и времени.

Если fmt не указан, эта функция является синонимом cast(expr AS DATE).

Если fmt неправильно сформирован или его приложение не приводит к правильно сформированной дате, Azure Databricks вызывает ошибку.

Чтобы вернуться NULL вместо ошибки при expr неправильной форме, использовании try_cast(expr AS DATE) или в Databricks Runtime задайте для параметра spark.sql.ansi.enabledfalseзначение .

Распространенные причины ошибок и разрешения

to_date Вызывает ошибку, когда:

  • Входная строка не соответствует ожидаемому формату: если fmt не указано, входные данные должны находиться в yyyy-MM-dd формате или yyyy-MM-dd HH:mm:ss формате. Если данные используют другой формат, например dd/MM/yyyy или MM-dd-yyyy, укажите соответствующий fmt аргумент. Ознакомьтесь с шаблонами Datetime для всех поддерживаемых букв шаблонов.
  • Входная строка содержит недопустимые значения дат: например, месяц 13, день 32или нечисловые символы, в которых ожидаются цифры.
  • Строка форматирования использует неподдерживаемые буквы шаблонов: см. шаблоны Datetime для поддерживаемых символов и правил форматирования.

Условия ошибок

  • CAST_INVALID_INPUT. Вызывается, если не fmt указано, и входная строка не может быть проанализирована как дата.
  • CANNOT_PARSE_TIMESTAMP. Вызывается при fmt указании, но входная строка не соответствует заданному шаблону формата.

Примечание.

В Databricks Runtime, если , функция возвращается false вместо ошибки для неправильных дат.

Примеры

-- Parsing with default format (yyyy-MM-dd)
> SELECT to_date('2009-07-30 04:17:52');
 2009-07-30

-- Parsing with an explicit format
> SELECT to_date('2016-12-31', 'yyyy-MM-dd');
 2016-12-31

-- Parsing a non-default date format
> SELECT to_date('31/12/2016', 'dd/MM/yyyy');
 2016-12-31

-- Error: input is not a valid date string
> SELECT to_date('not-a-date');
  Error: CAST_INVALID_INPUT

-- Error: input format doesn't match the default yyyy-MM-dd format
> SELECT to_date('31/12/2016');
  Error: CAST_INVALID_INPUT

-- Fix: supply a fmt that matches the input format
> SELECT to_date('31/12/2016', 'dd/MM/yyyy');
  2016-12-31

-- Use try_cast to return NULL instead of an error for invalid input
> SELECT try_cast('not-a-date' AS DATE);
  NULL