Sql 从字符串转换日期和/或时间时转换失败(尝试保存XML数据时)
我有一个XML文件数据,如下所示Sql 从字符串转换日期和/或时间时转换失败(尝试保存XML数据时),sql,sql-server-2008,Sql,Sql Server 2008,我有一个XML文件数据,如下所示 '<NewDataSet> <tblVCWS_Schedule> <PKWSSchedule>1</PKWSSchedule> <ScheduleTime>PT7H</ScheduleTime> </tblVCWS_Schedule> <tblVCWS_Schedule> <PKWSSchedule>2&
'<NewDataSet>
<tblVCWS_Schedule>
<PKWSSchedule>1</PKWSSchedule>
<ScheduleTime>PT7H</ScheduleTime>
</tblVCWS_Schedule>
<tblVCWS_Schedule>
<PKWSSchedule>2</PKWSSchedule>
<ScheduleTime>PT13H30M</ScheduleTime>
</tblVCWS_Schedule>
<tblVCWS_Schedule>
<PKWSSchedule>3</PKWSSchedule>
<ScheduleTime>PT13H30M</ScheduleTime>
</tblVCWS_Schedule>
</NewDataSet>'
ScheduleTime字段是SQL中的time7数据类型字段
但是当我试图将数据保存到一个临时表中时,我得到了
从字符串转换日期和/或时间时转换失败
DECLARE @PreAdviceSubmissions varchar(max)
set @PreAdviceSubmissions=
'<NewDataSet>
<tblVCWS_Schedule>
<PKWSSchedule>1</PKWSSchedule>
<ScheduleTime>PT7H</ScheduleTime>
</tblVCWS_Schedule>
<tblVCWS_Schedule>
<PKWSSchedule>2</PKWSSchedule>
<ScheduleTime>PT13H30M</ScheduleTime>
</tblVCWS_Schedule>
<tblVCWS_Schedule>
<PKWSSchedule>3</PKWSSchedule>
<ScheduleTime>PT13H30M</ScheduleTime>
</tblVCWS_Schedule>
</NewDataSet>'
DECLARE @hDoc int
CREATE TABLE #PreAdviceSubmissions
(
PKWSSchedule bigint,
ScheduleTime Time(7)
)
EXECUTE sp_xml_preparedocument @hDoc OUTPUT, @PreAdviceSubmissions
INSERT INTO #PreAdviceSubmissions
(
PKWSSchedule,
ScheduleTime
)
SELECT
PKWSSchedule ,
CAST(ScheduleTime AS TIME(7))
FROM OPENXML(@hDoc,'/NewDataSet/tblVCWS_Schedule', 2)
WITH
(
PKWSSchedule bigint 'PKWSSchedule' ,
ScheduleTime Time(7) 'ScheduleTime'
)
EXECUTE sp_xml_removedocument @hDoc
select * from #PreAdviceSubmissions
有人能帮忙解决这个问题吗?请注意,我无法将数据类型Time7更改为任何其他数据类型。试试这个
DECLARE @TIME VARCHAR(50) = 'PT13H30M'
IF (SELECT PATINDEX('%M%','@TIME') > 0)
BEGIN
SELECT CONVERT(TIME,REPLACE(REPLACE(REPLACE(@TIME,'PT',''),'H',':'),'M',''))
END
ELSE
BEGIN
SELECT CONVERT(TIME,REPLACE(REPLACE(@TIME,'PT',''),'H',':00'))
END
您将ScheduleTime设置为PT13H30M,但其格式不正确。此值未转换为时间如何将PT13H30M转换为时间?我从XML文件中获取的值与此类似?时间数据类型在SQL SERVER中不接受字符串作为时间。您必须在代码本身中使用REPLACE并将其转换为时间。@ArunKumar检查我的答案,我认为这解决了您的问题:
INSERT INTO #PreAdviceSubmissions
(
PKWSSchedule,
ScheduleTime
)
SELECT
PKWSSchedule ,
CASE WHEN (SELECT CHARINDEX('%M%',ScheduleTime)) > 0 THEN
CONVERT(time(7),REPLACE(REPLACE(REPLACE(ScheduleTime,'PT',''),'H',':'),'M',''))
ELSE
CONVERT(time(7),REPLACE(REPLACE(ScheduleTime,'PT',''),'H',':00')) END
FROM OPENXML(@hDoc,'/NewDataSet/tblVCWS_Schedule', 2)
WITH
(
PKWSSchedule bigint 'PKWSSchedule' ,
ScheduleTime Time(7) 'ScheduleTime'
)