如何将此字符串转换为日期时间
20180227105954636241
select CONVERT(datetime, '20180227105954636241', 120)
从字符串转换日期和/或时间时转换失败。
答案 0 :(得分:2)
根据您的问题,我建议使用SUBSTRING方法并解析NVARCHAR值,然后将其转换为DATETIME。
DECLARE @date NVARCHAR(MAX) = '20180227105954636241'
DECLARE @year NVARCHAR(4) = SUBSTRING(@date,0,5)
DECLARE @month NVARCHAR(2) = SUBSTRING(@date,5,2)
DECLARE @day NVARCHAR(2) = SUBSTRING(@date,7,2)
DECLARE @hours NVARCHAR(2) = SUBSTRING(@date,9,2)
DECLARE @minutes NVARCHAR(2) = SUBSTRING(@date,11,2)
DECLARE @seconds NVARCHAR(2) = SUBSTRING(@date,13,2)
DECLARE @milliseconds NVARCHAR(2) = SUBSTRING(@date,15,3)
SELECT CONVERT(DATETIME, (@Year + '-' + @month + '-' + @day + ' ' + @hours + ':' + @minutes + ':' + @seconds + '.' + @milliseconds), 120)
答案 1 :(得分:1)
您无法直接将这些带图案的字符串转换为datetime
,并且我没有看到CONVERT
函数用于此目的。您可以将下面的字符串格式化为cast
它:
DECLARE @date VARCHAR(MAX) = '20180227105954636241'
DECLARE @date1 VARCHAR(30)
set @date1 = SUBSTRING(@date, 1, 8) + ' ' + -- this is datepart
SUBSTRING(@date, 9, 2) + ':' + -- this is hour
SUBSTRING(@date, 11, 2) + ':' + -- this is minute
SUBSTRING(@date, 13, 2) + '.' + -- this is second
SUBSTRING(@date, 15, 6) -- this is decimal of second
select cast(@date1 as datetime2(6)) -- 6 is the decimal point of second
<强>输出强>
2018-02-27 10:59:54.636241
答案 2 :(得分:0)
您可以使用STUFF
功能插入必要的冒号,句号和短划线。 STUFF有4个参数。首先是字符串填充字符,第二个是字符串中的位置,第三个是要删除的字符数(在本例中总是0),第四个是要插入的字符。
填充后,这会导致字符串26个字符长,但转换为datetime只接受23个字符。你必须取这个值的LEFT
23,切断字符串的最后3个字符以转换为datetime数据类型。
DECLARE @temp varchar(100) = '20180227105954636241'
SELECT CONVERT(datetime, LEFT(STUFF(STUFF(STUFF(STUFF(STUFF(STUFF(@temp, 15, 0, '.'), 13, 0, ':'), 11, 0, ':'), 9, 0, ' '), 7, 0, '-'), 5, 0, '-'), 23), 120)