【问题标题】:Converting SQL dates to different formats将 SQL 日期转换为不同的格式
【发布时间】:2016-04-15 15:44:52
【问题描述】:

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

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)

有人可以帮忙吗?

编辑

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

【问题讨论】:

  • 标记使用的 dbms。 (其中许多在日期/时间方面远不符合 ANSI SQL...)

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


【解决方案1】:

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

【讨论】:

  • 您好,感谢您的快速响应。当我尝试您的代码时。我收到以下错误:“将 varchar 数据类型转换为 datetime 数据类型导致值超出范围。”
  • @MishMish,是 SQL Server 吗?你是对的,第二行中的直接演员是特定于文化的。在我的国家,这是有效的。编辑了我的答案...
  • 是的,它是一个 msssql 服务器,谢谢,它现在可以完美运行,我会用我的解决方案尝试一下
  • 最后一个问题,我如何在查询中使用上述示例,该查询存储在如下所示的存储过程中:Select TimeStamp From Table1 where item in (1123,3233,2342) Timestamp is the具有 varchar 数据类型的列
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-21
  • 1970-01-01
  • 2021-08-01
  • 1970-01-01
  • 2013-08-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多