Sql 如何将特定字符/字符串格式化为datetime?
下面的字符串/char是SQL Server不支持的日期格式,我需要在SQL Server 2008中将其转换为Sql 如何将特定字符/字符串格式化为datetime?,sql,sql-server-2008,datetime,Sql,Sql Server 2008,Datetime,下面的字符串/char是SQL Server不支持的日期格式,我需要在SQL Server 2008中将其转换为datetime数据类型 20170202131759 此日期格式由年、月、日、小时、分钟、秒组成SQL server无法将此字符串隐式转换为DateTime,您需要插入一些字符: Select SUBSTRING('20170202131759',1,4) + '-' + SUBSTRING('20170202131759',5,2) + '-' + SUBSTRING('2017
datetime
数据类型
20170202131759
此日期格式由年、月、日、小时、分钟、秒组成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
,那么它可能是一个日期时间
字符串如果您遇到的给定格式不是可用于转换的内置格式之一,您通常必须“构建”一个
这可以通过使用单个函数调用或使用函数将其转换为一种格式来轻松实现(同时调用将其转换为日期时间
):
示例
20170602 13:17:59
是一种可解析格式,可以使字符串看起来像这样(&cast):
select cast(stuff(stuff(stuff('20170202131759', 9, 0, ' '), 12, 0, ':'), 15, 0, ':') as datetime)
(假设为mmdd)这使用left()
和substring()
构建以下字符串格式yyyyMMdd HH:mm:ss
,并使用convert()
将其转换为datetime
数据类型
rextester演示:子字符串是您的朋友。为什么在最后一部分中有.ooo结果。2017-02-02 13:17:59.000所有日期时间都是以毫秒为单位的
select cast(stuff(stuff(stuff('20170202131759', 9, 0, ' '), 12, 0, ':'), 15, 0, ':') as datetime)
declare @str varchar(15)= '20170202131759';
select convert(datetime,
left(@str,8)+' '
+substring(@str,9,2)+':'
+substring(@str,11,2)+':'
+substring(@str,13,2)
)