SQL Server:将YYYYMMDD-HHMMSS传输到mm / dd / yyyy hh:mm:ss

时间:2016-11-30 22:03:38

标签: sql-server date datetime

我的SQL Server系统是2016年。

作为主题,我想将YYYYMMDD-HHMMSS转换为mm / dd / yyyy hh:mm:ss,并使用动态SQL来实现此目的。

我的数据如下:

      ID
20161119-075950
20161117-110952
20161118-153406

数据类型为nvarchar。

虽然我使用了以下语法:

SELECT convert(date,convert(varchar(max),id,130), 130) from abc

错误从字符串转换日期和/或时间时转换失败。显示。我在想是不是因为SQL Server无法将此 YYYYMMDD-HHMMSS 标识为日期类型,我需要先将其转换为 YYYYMMDD hh:mm:ss 然后再 mm / dd / yyyy hh:mm:ss ?随意摆脱一些灯光。谢谢!

3 个答案:

答案 0 :(得分:2)

Select CONVERT(VARCHAR(25) , CAST(LEFT(ID , 8) AS DATETIME), 101) 
       + ' ' +  LEFT(RIGHT(ID , 6) ,2) + ':' 
       + SUBSTRING(RIGHT(ID , 6) , 3,2) + ':' 
       + RIGHT(ID , 2) 
FROM TableName 

答案 1 :(得分:2)

尝试这样

DECLARE @tbl TABLE(ID NVARCHAR(100));
INSERT INTO @tbl VALUES
 ('20161119-075950')
,('20161117-110952')
,('20161118-153406');

- 这是您需要的实际select

SELECT CAST(LEFT(ID,8) AS DATETIME) + STUFF(STUFF(RIGHT(ID,6),5,0,':'),3,0,':')
FROM @tbl

你的第一部分是严格的8个字符长并且隐含地可以拼写(未加密的日期时间yyyymmdd)。时间部分严格为6个字符。我使用STUFF插入冒号。此时间可以添加到DATETIME。它将再次隐含地转移到DATETIME

修改

要达到标题中所述的给定格式,只需先使用代码101转换第一部分:

SELECT CONVERT(VARCHAR(10),CAST(LEFT(ID,8) AS DATETIME),101) + ' ' + STUFF(STUFF(RIGHT(ID,6),5,0,':'),3,0,':')
FROM @tbl

答案 2 :(得分:0)

这应该得到你想要的格式......但是可能有更好的方法。

select 
  convert(varchar(16),convert(date,left(ID,8)),101) + 
  ' ' + 
  substring(substring(ID,10,6),1,2) + 
  ':' + 
  substring(substring(ID,10,6),3,2) + 
  ':' + substring(substring(ID,10,6),5,2)