2015-01-09 2 views
0

У меня есть столбец varchar (255) в моей базе данных SQL, содержащий метки времени. Мне нужно преобразовать это в формат даты и времени. Однако я не уверен, какой метод cast/convert подходит.Преобразование даты varchar с текстом в datetime

Формат выглядит следующим образом:

DDD, DD MMM YYYY HH:MM:SS 

примеры данных:

Tue, 9 Sep 2014 07:24:25 +0000 
Mon, 30 Jun 2014 20:18:19 -0530 

Индикаторы часового пояса после того, как второй (SS) цифры могут быть проигнорированы.

Желаемый результат: YYYY-MM-DD HH:MM:SS

+2

И вот почему вы не t хранить даты в столбцах varchar – Jamiec

+0

Как упоминалось в Jamiec, вы должны хранить даты как даты в базе данных. Форматирование и отображение - это работа приложения. Существует множество опций на стороне пользовательского интерфейса для выполнения форматирования даты практически на любой платформе. – danish

+0

Я согласен, но у меня нет собственности на БД :( – madsh

ответ

0

Если ваш формат всегда выглядеть ваш может использовать следующую

Select convert(datetime, SUBSTRING(DateColumn, CharIndex(',', DateColumn) + 1, LEN(DateColumn) - (CharIndex(',', DateColumn) + 1 + CHARINDEX(':', REVERSE(DateColumn)) - 4)))) 

Вот мой пример:

Declare @val varchar(40) = 'Tue, 9 Sep 2014 07:24:25 +0000' 
Declare @val1 varchar(40) = 'Mon, 30 Jun 2014 20:18:19 -0530 (PST)' 

Select convert(datetime, substring(@val, CharIndex(',', @val) + 1, Len(@val) - (CharIndex(',', @val) + 1 + CHARINDEX(':', REVERSE(@Val)) - 4))) 
Select convert(datetime, substring(@val1, CharIndex(',', @val1) + 1, Len(@val1) - (CharIndex(',', @val) + 1 + CHARINDEX(':', REVERSE(@Val1)) - 4))) 
+0

Мне нравится этот метод, но, видимо, я не был достаточно тщательно с образцами. Sun, 14 Dec 2014 08:38:25 -0800 (PST) ' Это также может появиться .. – madsh

+0

Я изменил его. Больше не исправлено – Jaques

+0

На самом деле это может быть упрощено, но ваша помощь приведет меня к решению: convert (datetime, SUBSTRING (date, 6,20)) Thx! – madsh

0

Извлечение различных частей, используя подстроку, возьмите один дополнительный символ из-за одного или двух цифр дней. . летняя часть: trim(substring(col from 12 for 5))

Аналогичные для остальных предметов. месяц нуждается в дополнительной работы, чтобы получить номер месяца от названия месяца

case trim(substring(col from 8 for 4)) 
    when 'Jan' then '01' 
    when 'Feb' then '02' 
    ... 
    when 'Dec' then '12' 
end 

Concat ваших различных частей, не забудьте разделительные черточки и т.д.