При преобразовании в 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
Это не имеет накладных расходов на преобразование, поэтому должно быть быстрее (я не проверял, является ли это существенным), ни потенциальным ошибки из него, но это может быть не то, что вам нужно.