大家好我正在尝试解析SQl Server 2005中的xml文件。我在xml中有一个datetime字段,字符串如下:'20110805060028.387'。我想将它转换为sql server中的datetime字段,但我正在努力学习语法。是否有可能从这个字符串得到dd / mm / yyy hh:mm:ss.ms(ms =微秒)?
答案 0 :(得分:6)
它不是支持的格式,因此您需要;
declare @dt varchar(42)= '20110805060028.387'
--convert to '20110805 06:00:28.387'
select cast(stuff(stuff(stuff(@dt, 9, 0, ' '), 12, 0, ':'), 15, 0, ':') as datetime)
>>2011-08-05 06:00:28.387
答案 1 :(得分:3)
子串是你的朋友:
DECLARE @Value NVarChar(50)
SET @Value = '20110805060028.387'
SELECT Convert(DateTime,
SubString(@Value, 1, 4) + '-' +
SubString(@Value, 5, 2) + '-' +
SubString(@Value, 7, 2) + ' ' +
SubString(@Value, 9, 2) + ':' +
SubString(@Value, 11, 2) + ':' +
SubString(@Value, 13, 10))
(顺便说一下,在这里创建一个可解析的日期字符串时,我故意不遵循你的“dd / mm / yyy”格式,而是一种SQL服务器无论是否正确读取的国际(不完全是ISO标准)格式服务器的DATEFORMAT
设置)
答案 2 :(得分:1)
DECLARE @parsedValue VARCHAR(MAX)
DECLARE @rawDateValue VARCHAR(MAX)
SET @rawDateValue = '20110805060028.387'
SET @parsedValue = SUBSTRING(@rawDateValue, 1, 4) + '/' +
SUBSTRING(@rawDateValue, 5, 2) + '/' +
SUBSTRING(@rawDateValue, 7, 2) + ' ' +
SUBSTRING(@rawDateValue, 9, 2) + ':' +
SUBSTRING(@rawDateValue, 11, 2) + ':' +
SUBSTRING(@rawDateValue, 13, 2) + ':' +
SUBSTRING(@rawDateValue, 16, 3)
SELECT CONVERT(datetime, @parsedValue)
答案 3 :(得分:1)
我的看法(必然不是最好的):
DECLARE @val VARCHAR(30)='20110805060028.387'
SELECT LEFT(@val,4) [yyyy], RIGHT(LEFT(@val,6),2)[mm], RIGHT(LEFT(@val,8),2)[dd],
RIGHT(LEFT(@val,10),2)[hh], RIGHT(LEFT(@val,12),2)[mi],
RIGHT(LEFT(@val,14),2)[ss],SUBSTRING(@val, 15,LEN(@val)-14) [ms]
DECLARE @date DATETIME
SELECT @date = CAST(LEFT(@val,4) + '-' + RIGHT(LEFT(@val,6),2) + '-' +
RIGHT(LEFT(@val,8),2) + ' ' + RIGHT(LEFT(@val,10),2) + ':' +
RIGHT(LEFT(@val,12),2) + ':' + RIGHT(LEFT(@val,14),2) +
SUBSTRING(@val, 15,LEN(@val)-14) AS DATETIME)
SELECT @date, DATEPART(MILLISECOND,@date)[ms], DATEPART(MONTH,@date)[MM]