Преобразовать строку в дату и время

В этом руководстве вы узнаете, как преобразовать строку в дату и время в SQL Server с помощью функций CONVERT() и TRY_CONVERT().

Введение в функции CONVERT() и TRY_CONVERT()

SQL Server предоставляет функцию CONVERT(), которая преобразует значение одного типа в другой:

CONVERT(target_type, expression [, style])

Помимо функции CONVERT(), вы также можете использовать функцию TRY_CONVERT():

TRY_CONVERT(target_type, expression [, style])

Основное различие между CONVERT() и TRY_CONVERT() заключается в том, что в случае сбоя преобразования функция CONVERT() выдает ошибку, а функция TRY_CONVERT() возвращает NULL.

В этом примере функция CONVERT() используется для преобразования строки в формате даты ANSI в дату и время:

  SELECT 
    CONVERT(DATETIME, '2019-08-15', 102) result;

Вот что получилось:

result
-----------------------
2019-08-15 00:00:00.000
(1 row affected)

Если преобразование не удалось, функция CONVERT() выдаст ошибку:

SELECT 
    CONVERT(DATETIME, '2019-18-15', 102) result;

Ниже приведено сообщение об ошибке:

The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.

С другой стороны, функция TRY_CONVERT() возвращает NULL вместо того, чтобы выдавать ошибку, если преобразование не удается:

SELECT 
    TRY_CONVERT(DATETIME, '2019-18-15', 102) result;

Вывод:

result
-----------------------
NULL
(1 row affected)

Преобразование строки в формате даты ANSI/ISO и США в дату и время

Функции CONVERT() и TRY_CONVERT() по умолчанию распознают форматы ANSI/ISO и US с различными разделителями, поэтому вам не нужно добавлять параметр стиля.

В этом примере показано, как использовать функцию CONVERT() для преобразования строк в формате даты ISO в значения datetime:

SELECT CONVERT(DATETIME, '2019-09-25');
SELECT CONVERT(DATETIME, '2019/09/25');
SELECT CONVERT(DATETIME, '2019.09.25');
SELECT CONVERT(DATETIME, '2019-09-25 12:11');
SELECT CONVERT(DATETIME, '2019-09-25 12:11:09');
SELECT CONVERT(DATETIME, '2019-09-25 12:11:09.555');
SELECT CONVERT(DATETIME, '2019/09/25 12:11:09.555');
SELECT CONVERT(DATETIME, '2019.09.25 12:11:09.555');

Обратите внимание, что функция CONVERT() также может преобразовать строку даты ISO без разделителей в значение даты, как показано в следующем примере:

SELECT 
    CONVERT(DATETIME, '20190731') result;

Вот что получилось:

result
-----------------------
2019-07-31 00:00:00.000
(1 row affected)

Функции CONVERT() и TRY_CONVERT() по умолчанию могут преобразовывать формат даты и времени США(месяц, день, год и время), поэтому вам не нужно указывать стиль 101:

SELECT TRY_CONVERT( DATETIME, '12-31-2019');
SELECT TRY_CONVERT( DATETIME, '12/31/2019');
SELECT TRY_CONVERT( DATETIME, '12.31.2019');
SELECT TRY_CONVERT( DATETIME, '12-31-2019 12:15');
SELECT TRY_CONVERT( DATETIME, '12/31/2019 12:15:10');
SELECT TRY_CONVERT( DATETIME, '12.31.2019 12:15:10.333');

В этом уроке вы узнали, как преобразовать строку в дату и время с помощью функций CONVERT() и TRY_CONVERT().

Мирослав С.

Автор статей, ИБ-специалист