В этом руководстве вы узнаете, как преобразовать строку в дату и время в 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().