Неожиданные результаты с преобразованием даты и времени - PullRequest
0 голосов
/ 27 мая 2020

Я пытался получить дату, отформатированную как 01.01.2012 6:10:00 PM, но я продолжаю получать 2012-01-01 18: 10: 00.000, руководство Microsoft предлагает использовать формат 103, насколько я понимаю . 103 = дд / мм / гггг

вот что у меня

SELECT convert(datetime,'01-01-2012 6:10:00 PM',103)

что я здесь делаю не так?

1 Ответ

2 голосов
/ 27 мая 2020

При преобразовании в datetime стиль (в вашем случае 103) указывает формат получаемой строки, т.е. SELECT CONVERT(DATE, '01/02/2012', 103), будет интерпретироваться как 1 февраля, а не 2 января. Результат этого преобразования будет иметь тип DATETIME, а даты не имеют неявного формата, они могут быть представлены строкой в ​​разных форматах, но сама дата и время не имеет. Итак, вам сначала нужно преобразовать вашу строку в datetime, используя стиль, основанный на вводе (105: dd-mm-yyyy или 110: mm-dd-yyyy), а затем преобразовать ее обратно в строку, используя стиль, который вы хотите вывести (103):

SELECT CONVERT(VARCHAR(10), CONVERT(DATETIME, '01-02-2012 6:10:00 PM', 105), 103),
        CONVERT(VARCHAR(10), CONVERT(DATETIME, '01-02-2012 6:10:00 PM', 110), 103)

Если ваш ввод является строкой в ​​постоянном формате, всегда действителен, и вы хотите вывести строку, то вы можете обнаружить, что простая манипуляция строкой лучше всего подходит для вас. например,

SELECT REPLACE(LEFT('01-02-2012 6:10:00 PM', 10), '-', '/')

Дает:

01/02/2012

Это не имеет накладных расходов на преобразование, поэтому должно быть быстрее (я не проверял, является ли это существенным), ни потенциальным ошибки из него, но это может быть не то, что вам нужно.

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