Прежде всего - лучший совет, который я могу вам дать, это прекратить использование строковых представлений значений DateTime.
Есть только одно место, где полезно использовать строковое представление dateTime, и это на уровне представления -Пользовательский интерфейс, который использует данные.
Сказав это, иногда невозможно изменить реализацию системы, и вы просто застряли на том, что у вас есть - так вот пример кода, как преобразовать строку, содержащую 2018-12-07 13.00.54.984000
в строку, содержащую 07-DEC-18 01.00.54.984000 PM
.
Итак, первым шагом, очевидно, будет преобразование исходной строки в DateTime2
- но для этого вам нужно заменить точки между часами, минутами и секундами на двоеточия,Для этого вы можете использовать STUFF
.
DECLARE @DateString varchar(30) = '2018-12-07 13.00.54.984000'
SELECT CAST(STUFF(STUFF(@DateString, 17, 1, ':'), 14, 1, ':') AS DateTime2);
Теперь, чтобы получить желаемый формат строки из DateTime2
, проще всего использовать функцию Format
(хотя стоит отметить, что ее производительность довольно медленнаяпо сравнению с другими вариантами преобразования - см. FORMAT () Аарона Бертранда - это хорошо и все, но… )
SELECT FORMAT(@DateTime, 'dd-MMM-yy hh.mm.ss.fffffff tt')
Весь сценарий:
DECLARE @DateString varchar(30), @Date DateTime2;
SET @DateString = '2018-12-07 13.00.54.984000'
SELECT @Date = CAST(STUFF(STUFF(@DateString, 17, 1, ':'), 14, 1, ':') AS DateTime2)
SELECT FORMAT(@Date, 'dd-MMM-yy hh.mm.ss.fffffff tt') As Result
Результат
07-Dec-18 01.00.54.9840000 PM