如何将SQL Server中没有分隔符的datetime字符串转换为datetime? [英] How to convert datetime string without delimiters in SQL Server as datetime?
问题描述
我正在寻找转换这样一个字符串: 20160520191959550
- 实际上是的时间日期时间20:19: 59
。
I am looking to convert a string like this: 20160520191959550
- that is actually date-time for 2016-05-20 19:19:59
.
我在SQL语句中尝试使用 CAST作为datetime
,但是收到此错误:
I tried using CAST as datetime
in a SQL statement, but got this error:
从字符串转换日期和/或时间时转换失败。
Conversion failed when converting date and/or time from character string.
这是SQL:
Select Cast(vbon.DATE_INS As datetime) As DINS
From vbon
我常规在没有分隔符的日期字符串上使用 CAST
,并且正在寻找类似的解决方案。有没有一个简单的方法来完成工作,而不需要恢复到 LEFT
, RIGHT
和 SUBSTRING
?
I routinely use CAST
on date strings without delimiters and am looking for a similar solution. Is there a simple way to get the job done without reverting to LEFT
, RIGHT
and SUBSTRING
?
推荐答案
在SQL Server 2012及更高版本中,您可以使用 DATETIMEFROMPARTS
:
In SQL Server 2012 and later, you can use DATETIMEFROMPARTS
:
DECLARE @DateTimeString varchar(19) = '20160520191959550';
SELECT DATETIMEFROMPARTS(
SUBSTRING(@DateTimeString,1,4)
, SUBSTRING(@DateTimeString,5,2)
, SUBSTRING(@DateTimeString,7,2)
, SUBSTRING(@DateTimeString,9,2)
, SUBSTRING(@DateTimeString,11,2)
, SUBSTRING(@DateTimeString,13,2)
, SUBSTRING(@DateTimeString,15,3)
);
在早期版本中,一种方法是构建ISO 8601格式的字符串,并使用 CAST
或 CONVERT
:
In earlier versions, one method is to build a ISO 8601 formatted string and use CAST
or CONVERT
:
SELECT CAST(
SUBSTRING(@DateTimeString,1,4)
+ '-' + SUBSTRING(@DateTimeString,5,2)
+ '-' + SUBSTRING(@DateTimeString,7,2)
+ 'T' + SUBSTRING(@DateTimeString,9,2)
+ ':' + SUBSTRING(@DateTimeString,11,2)
+ ':' + SUBSTRING(@DateTimeString,13,2)
+ '.' + SUBSTRING(@DateTimeString,15,3)
AS datetime2(3));
这篇关于如何将SQL Server中没有分隔符的datetime字符串转换为datetime?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!