将 SQL 个日期转换为不同的格式

Converting SQL dates to different formats

我有一个任务应该很简单,只需将日期转换为特定格式

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

(yyyy-mm-ddThh:mm:ss+[timezone offset]),我稍后将其导出到需要此类型格式的 Excel 模板。

查看存储所有数据的数据库 table 我注意到存储日期的列是 Varchar(20) 数据类型。据我所知,这样保存日期是一件坏事。

所以基本上我需要的是转换以下内容:

   SELECT TIMESTAMP AS LASTCHANGEDATE FROM TABLE1

yyyy-mm-ddThh:mm:ss+[timezone offset] 格式,但 TIMESTAMP 的数据类型为 varchar(20)

有人可以帮忙吗?

编辑

日期是这样存储在 atm 23.12.2015 17:08:18

在SQL服务器中是这样的:

编辑:像这样尝试:

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';

我尝试直接投射的原因是你的"The dates are stored atm like this"。我想,如果以不同的格式出现,最好不要指定它...

旧代码:

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';

编辑:CONVERT 的第三个参数是 126。这将创建一个 ISO8601 兼容的等效日期

结果:

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

编辑:根据您的评论,您可以像这里那样实施。

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);