我的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 ?随意摆脱一些灯光。谢谢!
答案 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)