Преобразование даты и времени в nvarchar (8) в T-SQL - PullRequest
1 голос
/ 23 апреля 2019

Я пытаюсь преобразовать столбец datetime в формат ISO, как yyyymmdd. Например, я хотел бы иметь возможность конвертировать «13 декабря 2018 года» в «20181213».

Согласно Документам Microsoft T-SQL , я смогу сделать это, используя

convert(nvarchar(8), '13 dec 2018', 112)

однако это не работает - я получаю результат «13 декабря 2», который выглядит не более чем оригинальной строкой, сокращенной до 8 символов.

Я также пытался использовать

convert(datetime, '13 dec 2018', 112)

, который дает мне результат «13 декабря 2018 г., 00:00» - опять же, ничего похожего на то, что должна производить функция.

Что я делаю не так? Я мог бы решить проблему достаточно легко, используя datepart() и сцепленные строки, но я бы предпочел использовать более элегантный подход, если это возможно.

Ответы [ 4 ]

4 голосов
/ 23 апреля 2019

Объедините их:

convert(nvarchar(8), convert(datetime, '13 dec 2018'), 112)

Я не рекомендую использовать формат 112 для первого преобразования, потому что оно вводит в заблуждение.SQL Server очень хорош в преобразовании без формата.Если вы используете один из них, соответствующий 106.

1 голос
/ 23 апреля 2019

Я понял это - потому что я вводил дату в виде строки, а не преобразовывал ее сначала в значение даты и времени, он относился к моей дате как к строке. Когда я обращаюсь с этим так:

convert(nvarchar(8), cast('13 dec 2018' as datetime), 112)

Я получаю ожидаемый результат, '20181213'.

0 голосов
/ 23 апреля 2019

Формат ГГГГММДД можно получить по дате / времени в формат varchar.

select convert(varchar(8),convert(datetime, '13 dec 2018'),112)

Приведенный выше запрос дает требуемый результат

0 голосов
/ 23 апреля 2019

выберите конвертирование (nvarchar (8), приведение (GETDATE () в качестве даты и времени), 112) в качестве TodayDate

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...