Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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 server 2005 如何在sql中读取xml日期时间_Sql Server 2005_Tsql - Fatal编程技术网

Sql server 2005 如何在sql中读取xml日期时间

Sql server 2005 如何在sql中读取xml日期时间,sql-server-2005,tsql,Sql Server 2005,Tsql,我有一个存储过程,它正在接收xml参数,现在xml包含日期和时间字段 下面是我的xml示例,它作为参数传递给存储过程。我正在使用SQLServer2005 <transdetails> <_x005B_Sheet1_x0024__x005D_> <Date_of_transaction>2011-07-29T13:47:34+05:00</Date_of_transaction> <Type_of_the_transac

我有一个存储过程,它正在接收xml参数,现在xml包含日期和时间字段

下面是我的xml示例,它作为参数传递给存储过程。我正在使用SQLServer2005

 <transdetails>
  <_x005B_Sheet1_x0024__x005D_>
    <Date_of_transaction>2011-07-29T13:47:34+05:00</Date_of_transaction>
    <Type_of_the_transaction>card</Type_of_the_transaction>
    <Card_number>7000460000451470</Card_number>
    <Total_quantity>27.81</Total_quantity>
    <Total_amount>2419.75</Total_amount>
    <Name_of_Retail_Outlet>MIDWAY PETROLEUM SERVICES</Name_of_Retail_Outlet>
    <Product_Purchased>PETROL</Product_Purchased>
  </_x005B_Sheet1_x0024__x005D_>
<transdetails>
现在,我在尝试将事务的
Date\u
转换为datetime时遇到一个错误。如果我最初尝试将该值设置为varchar,那么它将返回整数值(例如,如果我有Date)

2011-07-29T13:47:34+05:00 

它将返回2…请提供帮助?

您将插入到定义为
Date\u of\u transaction VARCHAR
的列中,因此它将截断为1个字符,因为没有指定比例,因此,将
2
插入到定义为
Date\u of_transaction VARCHAR
的列中,它将截断为1个字符,因为没有指定刻度,因此
2
SQL Server 2005不处理日期时间值的时区部分

您可以使用一个选项来获取不带时区的日期时间

x.d.query('./Date_of_transaction').value('substring(., 1, 19)' , 'DateTime')
样本中的结果值为
2011-07-29 13:47:34.000

在SQL Server 2008中,查询可以正常运行,但返回的值将是
2011-07-29 08:47:34.000
,因为它使用时区值


顺便说一句:您应该将
@DestinationTemp
中的
Date\u事务的数据类型更改为
DateTime
,SQL Server 2005不处理日期时间值的时区部分

您可以使用一个选项来获取不带时区的日期时间

x.d.query('./Date_of_transaction').value('substring(., 1, 19)' , 'DateTime')
样本中的结果值为
2011-07-29 13:47:34.000

在SQL Server 2008中,查询可以正常运行,但返回的值将是
2011-07-29 08:47:34.000
,因为它使用时区值

顺便说一句:您应该在
@DestinationTemp

@shumaila中将
Date\u事务的数据类型更改为
DateTime
,这太棒了@舒梅拉-那太好了。