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
Sql 从字符串转换日期和/或时间时转换失败(尝试保存XML数据时)_Sql_Sql Server 2008 - Fatal编程技术网

Sql 从字符串转换日期和/或时间时转换失败(尝试保存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&

我有一个XML文件数据,如下所示

'<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'          
    )