У меня есть datetime
столбец ArrivalDateTime
, который хранится как значение varchar
.SQL Server 2008: преобразование Varchar в Datetime
Скажем, если значение 20161212093256
, я хочу, чтобы выход был 2016-12-12 09:32:56
.
Я мог бы получить дату в формате даты и времени, как показано ниже.
SELECT
CONVERT(DATETIME2(0), LEFT('20161212093256', 8))
Это возвращает результат как 2016-12-15 00:00:00
.
Я попробовал следующий запрос, чтобы получить часть времени.
SELECT
CONVERT(DATE, LEFT('20161212093256', 8)) + ' ' +
CONVERT(TIME, RIGHT('20161212093256', 6))
Но это выдает ошибку:
The data types date and varchar are incompatible in the add operator
Как я могу получить как дата и время часть в формате datetime
?
прочитанное Аарон Бертрана (http://sqlblog.com/blogs/aaron_bertrand /archive/2009/10/12/bad-habits-to-kick-using-the-wrong-data-type.aspx). –
Спасибо, помощник за указатель. К сожалению, я должен использовать столбец, созданный кем-то другим. Теперь я не могу изменить свой тип данных. – turbo88
@ turbo88 вы не можете просто игнорировать эту ошибку проектирования, так как это влияет как на индексирование, запрос и производительность. Используя произвольную строку вместо даты, вы отключите все оптимизации запросов, связанных с датами.Перед запросом вам нужно будет преобразовать любые критерии даты в этот произвольный формат. Вы не сможете использовать какие-либо функции, связанные с датой, без разбора. И, наконец, механизм запроса должен будет обрабатывать и передавать каждую отдельную результирующую строку, когда он может использовать операции или индексы на основе набора, включающие столбец даты. Это приведет к огромному штрафу за производительность –