2016-01-11 4 views
1

У меня есть задача, которая должна быть легко, просто преобразование даты в к specfic форматуПреобразование даты SQL в различные форматы

2015-11-16T20:34:19+08:00 

(yyyy-mm-ddThh:mm:ss+[timezone offset]), который я потом экспортировать в шаблон Excel, который требует такого типа для формата ,

Просмотрев таблицу базы данных, где хранятся все данные, я заметил столбец, в котором хранятся даты, составляет Varchar(20). Насколько мне известно, неплохо сохранить даты.

Поэтому в основном то, что мне нужно, чтобы преобразовать следующее:

SELECT TIMESTAMP AS LASTCHANGEDATE FROM TABLE1 

В формате yyyy-mm-ddThh:mm:ss+[timezone offset], но TIMESTAMP имеет тип данных varchar(20)

Любой может помочь с этим?

EDIT

Даты сохраняются атм, как этот 23.12.2015 17:08:18

+2

Тег dbms used. (Многие из них далеки от соответствия ANSI SQL, когда дело доходит до даты/времени ...) – jarlh

ответ

2

В SQL Server это что-то вроде этого:

EDIT: Попробуйте это как это:

DECLARE @dtString VARCHAR(100) = '23.12.2015 17:08:18'; 
DECLARE @dt DATETIME = CONVERT(DATETIME, @dtString, 104); 
SELECT CONVERT(VARCHAR(100),@dt,126)+'+08:00'; 

Причина, по которой я пробовал прямой перевод, был вашим «Даты хранятся atm вот так». Я подумал, если происходят в различных форматах, было бы лучше не указывать его ...

Старый Код:

DECLARE @dtString VARCHAR(100) = '23.12.2015 17:08:18'; 
DECLARE @dt DATETIME = CAST(@dtString AS DATETIME); 
SELECT CONVERT(VARCHAR(100),@dt,126)+'+08:00'; 

EDIT: третий параметр CONVERT 126. Это создаст ISO8601 совместимый дата эквивалент

результат:

2015-12-23T17:08:18+08:00 

EDIT: в соответствии с вашим комментарием вы можете осуществить это, как здесь.

DECLARE @tbl TABLE(TimeStamp VARCHAR(100),item INT); 
INSERT INTO @tbl VALUES 
('23.12.2015 17:08:18',1123) 
,('23.12.2015 19:08:18',1123) 
,('24.12.2015 17:08:18',1123) 
,('22.12.2015 19:08:18',3233) 

SELECT item, CONVERT(VARCHAR(100),CONVERT(DATETIME,TimeStamp,104),126)+'08:00' AS ConvertedDate 
FROM @tbl 
WHERE item IN (1123,3233,2342); 
+0

Привет и спасибо за быстрый ответ. Когда я пробую ваш код. Я получаю следующую ошибку: «Преобразование типа данных varchar в тип данных datetime приводит к значению вне диапазона». – MishMish

+0

@MishMish, это SQL Server? Вы правы, прямой бросок во второй строке является специфическим для культуры. В моей стране это работает. Отредактировал мой ответ ... – Shnugo

+0

Да, это сервер msssql, и спасибо, он отлично работает сейчас, я попробую его с моим решением. – MishMish

Смежные вопросы