#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
из anvarchar
; это уже annvarchar
. Также, если вы посмотрите на документацию , вы увидите, что style121
— это не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);
Не могли бы вы попробовать, подходит ли он вам