Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何将特定字符/字符串格式化为datetime?_Sql_Sql Server 2008_Datetime - Fatal编程技术网

Sql 如何将特定字符/字符串格式化为datetime?

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

下面的字符串/char是SQL Server不支持的日期格式,我需要在SQL Server 2008中将其转换为
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)
               )