Строка с форматом dd-MM-yyyy hh:mm:ss для даты и времени в SQL Server

#sql-server

#sql-сервер

Вопрос:

Я пытаюсь преобразовать nvarchar(max) столбец в a datetime в SQL Server. Формат dd-MM-yyyy hh:mm:ss , который я хотел бы сохранить, однако я хотел бы изменить тип на datetime . Я нашел много похожих вопросов об этом преобразовании, но не с моим конкретным форматом.

Я пытался CONVERT(nvarchar(MAX), string_column, 121) , но безуспешно. Как это можно сделать? В качестве примера я хотел бы преобразовать строку 26-11-2021 08:19:16 в datetime.

Комментарии:

1. Вы пытаетесь преобразовать ее в an nvarchar из a nvarchar ; это уже an nvarchar . Также, если вы посмотрите на документацию , вы увидите, что style 121 — это не dd-MM-yyyy hh:mm:ss так. Реальная проблема здесь заключается в вашем дизайне; храните данные даты и времени как тип данных даты и времени.

2. An nvarchar(MAX) , кстати, действительно ужасный выбор типа данных для значения даты и времени. Размер даты и времени никогда не будет превышать 2 ГБ , и они являются двоичными значениями, поэтому им не нужно сохранять полный диапазон символов UTF-16.

3.«Формат dd-MM-yyyy hh:mm:ss , который я хотел бы сохранить» datetime не имеет формата, это двоичное число, которое хранит момент времени. При отображении ее можно отформатировать

Ответ №1:

Это работает для меня:

 SELECT CONVERT(datetime2(0), '26-11-2021 08:19:16', 105);
/* Output: 2021-11-26 08:19:16 */
 

В последних версиях SQL Server также есть TRY_PARSE метод:

 SELECT TRY_PARSE('26-11-2021 08:19:16' As datetime2(0) USING 'en-GB')
/* Output: 2021-11-26 08:19:16 */
 

Ответ №2:

  DECLARE @InString NVARCHAR(20)='26-11-2021 08:19:16';
 SELECT @InString;
 SELECT CONVERT(DATETIME,@InString,105);
 

Не могли бы вы попробовать, подходит ли он вам