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

时间:2016-01-11 10:56:23

标签: sql sql-server datetime timezone-offset type-conversion

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

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)

任何人都可以帮忙解决这个问题吗?

修改

日期存储在这里 23.12.2015 17:08:18

1 个答案:

答案 0 :(得分:2)

在SQL Server中,它是这样的:

编辑:尝试这样:

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

编辑: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);