Преобразование varchar datetime без тире и двоеточия в varchar datetime с тире и двоеточием

#sql-server

#sql-сервер

Вопрос:

Я хочу преобразовать эту 20201001163318 varchar дату и время примерно так 2020-10-01 16:33:18 .

Я попробовал это

 select convert(varchar, getdate(), 25) 
  

но это не работает

Комментарии:

1. convert(varchar, getdate(), 25) преобразует значение, возвращаемое из GETDATE() (которое является a datetime , а не a varchar ) в a varchar в формате кода стиля 25, который является yyyy-mm-dd hh:mi:ss.mmm .

2. Надеюсь , это не столбец в вашей базе данных; если это так, я настоятельно рекомендую исправить ваш дизайн и не хранить даты в a varchar . Если значение исходит из приложения, я рекомендую пересмотреть код и убедиться, что вы передаете тип данных даты и времени, а не a varchar .

Ответ №1:

Возможно stuff() , совместно с try_convert()

Пример

 declare @S varchar(50) = '20201001163318'

Select try_convert(varchar(19),try_convert(datetime,stuff(stuff(stuff(@S,13,0,':'),11,0,':'),9,0,' ')),120)
  

ВОЗВРАТ

 (No column name)
2020-10-01 16:33:18
  

Также, если вы хотите преобразовать getdate() в строку, вы можете попробовать:

 Select convert(varchar(19),getdate(),120)