【发布时间】:2017-08-21 21:36:41
【问题描述】:
以下字符串/字符是 SQL Server 不支持的日期格式,我需要在 SQL Server 2008 中将其转换为 datetime 数据类型
20170202131759
此日期格式由年、月、日、时、分、秒组成
【问题讨论】:
-
子字符串是你的朋友。
标签: sql sql-server-2008 datetime
以下字符串/字符是 SQL Server 不支持的日期格式,我需要在 SQL Server 2008 中将其转换为 datetime 数据类型
20170202131759
此日期格式由年、月、日、时、分、秒组成
【问题讨论】:
标签: sql sql-server-2008 datetime
SQL server 无法将此字符串隐式转换为DateTime,需要插入一些字符:
Select SUBSTRING('20170202131759',1,4) + '-' + SUBSTRING('20170202131759',5,2) + '-' + SUBSTRING('20170202131759',7,2) + ' ' + SUBSTRING('20170202131759',9,2)+ ':' + SUBSTRING('20170202131759',11,2) + ':' + SUBSTRING('20170202131759',13,2)
这会给你这个:
2017-02-02 13:17:59,那么它可能是一个DateTime 字符串
【讨论】:
如果您遇到的给定格式不是可用于转换的内置格式之一,您通常必须“构建”一个。
这可以很容易地使用单独的SUBSTRING() 函数调用或使用STUFF() 函数将其按摩成以下格式(连同CAST() 调用以实际将其变为DATETIME):
-- This will grab each section, append necessary separators and cast to a DATETIME
SELECT CAST(STUFF(STUFF(STUFF('20170202131759',13,0,':'),11,0,':'),9,0,' ') AS DATETIME)
示例
【讨论】:
20170602 13:17:59 是一种可解析的格式,让你的字符串看起来像这样 & 强制转换:
select cast(stuff(stuff(stuff('20170202131759', 9, 0, ' '), 12, 0, ':'), 15, 0, ':') as datetime)
(假设为 mmdd)
【讨论】:
这使用left() 和substring() 构建以下字符串格式yyyyMMdd HH:mm:ss,并使用convert() 将其转换为datetime 数据类型。
declare @str varchar(15)= '20170202131759';
select convert(datetime,
left(@str,8)+' '
+substring(@str,9,2)+':'
+substring(@str,11,2)+':'
+substring(@str,13,2)
)
rextester 演示:http://rextester.com/HEJ3250
【讨论】: