Как преобразовать значение даты и времени, хранящееся в виде
20200406151341
, в значение DATETIME 2020/04/06 15:31:41 (ГГГГ / ММ / ДД ЧЧ: ММ: СС.000) Я не могу найти подходящий формат CONVERT (), и пока единственный способ - это проанализировать VARCHAR, как показано ниже.
select dateadd(second, cast(substring('20200406151341',13,2) as int),dateadd(minute, cast(substring('20200406151341',11,2) as int), dateadd(hour,cast(substring('20200406151341',9,2) as int),convert(datetime, left('20200406151341',8), 112)))).
Он работает, но его трудно читать и понимать, особенно когда я должен использовать его в Оператор SELECT несколько раз.
Кроме того, я удивлен, что запрос с указанными выше преобразованиями так же быстр, как запрос с датами, сохраненными непосредственно в формате DATETIME. Использует ли сервер MS SQL какой-либо кэш, поэтому необходимо выполнять преобразование только один раз в строке?
Я использую MS SQL Server 2016.