Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.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 SQL Server中XML列中的日期转换_Sql Server_Xml - Fatal编程技术网

Sql server SQL Server中XML列中的日期转换

Sql server SQL Server中XML列中的日期转换,sql-server,xml,Sql Server,Xml,如何转换下面提到的XML代码日期格式 <StartDate>2015-12-24T00:00:00</StartDate> <EndDate>2015-12-29T15:39:20</EndDate> 2015-12-24T00:00:00 2015-12-29T15:39:20 如果使用内置XQuery功能访问XML内容,只需使用.value()方法,将输出数据类型定义为DATETIME2(3)类型-无需特殊处理: DECLARE @Input

如何转换下面提到的XML代码日期格式

<StartDate>2015-12-24T00:00:00</StartDate>
<EndDate>2015-12-29T15:39:20</EndDate>
2015-12-24T00:00:00
2015-12-29T15:39:20

如果使用内置XQuery功能访问XML内容,只需使用
.value()
方法,将输出数据类型定义为
DATETIME2(3)
类型-无需特殊处理:

DECLARE @InputTbl TABLE (ID INT NOT NULL, XmlContent XML)

INSERT INTO @InputTbl (ID, XmlContent)
VALUES (1, '<Root>
<StartDate>2015-12-24T00:00:00</StartDate>
<EndDate>2015-12-29T15:39:20</EndDate>
</Root>');

SELECT
    StartDate = XC.value('(StartDate)[1]', 'datetime2(3)'),
    EndDate = XC.value('(EndDate)[1]', 'datetime2(3)')
FROM
    @InputTbl
CROSS APPLY
    XmlContent.nodes('/Root') AS XT(XC)
DECLARE@inputbl表(ID INT不为NULL,XmlContent XML)
插入@inputbl(ID,XmlContent)
值(1,'
2015-12-24T00:00:00
2015-12-29T15:39:20
');
挑选
StartDate=XC.value(‘(StartDate)[1]’,‘datetime2(3)’),
EndDate=XC.value(‘(EndDate)[1]’,‘datetime2(3)’)
从…起
@输入BL
交叉应用
XmlContent.nodes('/Root')作为XT(XC)
这将返回以下输出:


如果使用内置XQuery功能访问XML内容,只需使用
.value()
方法,将输出数据类型定义为
DATETIME2(3)
类型-无需特殊处理:

DECLARE @InputTbl TABLE (ID INT NOT NULL, XmlContent XML)

INSERT INTO @InputTbl (ID, XmlContent)
VALUES (1, '<Root>
<StartDate>2015-12-24T00:00:00</StartDate>
<EndDate>2015-12-29T15:39:20</EndDate>
</Root>');

SELECT
    StartDate = XC.value('(StartDate)[1]', 'datetime2(3)'),
    EndDate = XC.value('(EndDate)[1]', 'datetime2(3)')
FROM
    @InputTbl
CROSS APPLY
    XmlContent.nodes('/Root') AS XT(XC)
DECLARE@inputbl表(ID INT不为NULL,XmlContent XML)
插入@inputbl(ID,XmlContent)
值(1,'
2015-12-24T00:00:00
2015-12-29T15:39:20
');
挑选
StartDate=XC.value(‘(StartDate)[1]’,‘datetime2(3)’),
EndDate=XC.value(‘(EndDate)[1]’,‘datetime2(3)’)
从…起
@输入BL
交叉应用
XmlContent.nodes('/Root')作为XT(XC)
这将返回以下输出:

这可能会对您有所帮助

DECLARE @X XML ='<StartDate>2015-12-24T00:00:00</StartDate>
<EndDate>2015-12-29T15:39:20</EndDate>'


SELECT   @X.value('/StartDate[1]','DATETIME') AS START_DTE
        ,@X.value('/EndDate[1]','DATETIME') AS END_DTE

+-------------------------+-------------------------+
|        START_DTE        |         END_DTE         |
+-------------------------+-------------------------+
| 2015-12-24 00:00:00.000 | 2015-12-29 15:39:20.000 |
+-------------------------+-------------------------+
DECLARE@xxml='2015-12-24T00:00:00
2015-12-29T15:39:20'
选择@X.value('/StartDate[1]','DATETIME')作为开始
,@X.value('/EndDate[1],'DATETIME')作为结束
+-------------------------+-------------------------+
|开始|结束||
+-------------------------+-------------------------+
| 2015-12-24 00:00:00.000 | 2015-12-29 15:39:20.000 |
+-------------------------+-------------------------+
更新:来自评论

XML中的数据时间格式遵循ISO8601标准。您正在考虑将其格式化为原生SQL格式,但将XML视为普通文本数据是不正确的。XML格式的数据是正确的。如果需要,可以将其转换为上述本机SQL

维基百科上有一个很好的信息 关于XML如何保存日期时间数据

单个时间点可以通过连接完整的 日期表达式、作为分隔符的字母T和有效时间 表情。例如,“2007-04-05T14:30”

这可能对你有帮助

DECLARE @X XML ='<StartDate>2015-12-24T00:00:00</StartDate>
<EndDate>2015-12-29T15:39:20</EndDate>'


SELECT   @X.value('/StartDate[1]','DATETIME') AS START_DTE
        ,@X.value('/EndDate[1]','DATETIME') AS END_DTE

+-------------------------+-------------------------+
|        START_DTE        |         END_DTE         |
+-------------------------+-------------------------+
| 2015-12-24 00:00:00.000 | 2015-12-29 15:39:20.000 |
+-------------------------+-------------------------+
DECLARE@xxml='2015-12-24T00:00:00
2015-12-29T15:39:20'
选择@X.value('/StartDate[1]','DATETIME')作为开始
,@X.value('/EndDate[1],'DATETIME')作为结束
+-------------------------+-------------------------+
|开始|结束||
+-------------------------+-------------------------+
| 2015-12-24 00:00:00.000 | 2015-12-29 15:39:20.000 |
+-------------------------+-------------------------+
更新:来自评论

XML中的数据时间格式遵循ISO8601标准。您正在考虑将其格式化为原生SQL格式,但将XML视为普通文本数据是不正确的。XML格式的数据是正确的。如果需要,可以将其转换为上述本机SQL

维基百科上有一个很好的信息 关于XML如何保存日期时间数据

单个时间点可以通过连接完整的 日期表达式、作为分隔符的字母T和有效时间 表情。例如,“2007-04-05T14:30”

这可能是工作

declare @date ='2015-12-24T00:00:00 2015-12-29T15:39:20'
SELECT CONVERT(date, Left(@date,10)) as NewDate
这可能是工作

declare @date ='2015-12-24T00:00:00 2015-12-29T15:39:20'
SELECT CONVERT(date, Left(@date,10)) as NewDate

有几个正确的答案,但我觉得这些答案并不符合你的实际问题:


在我的表中有一个xml列,该xml列包含包括日期在内的大量数据,我想将这些日期更新为日期格式,如“2/28/2017”,现在日期格式如“2012-04-26T00:00:00”

如果我没有弄错,您希望将XML中存储的日期更改为另一种格式,对吗

简单的回答:不要

ISO8601是XML中日期/时间值的标准格式。您更想要的2017年2月28日
2
格式与区域性相关,可能会导致错误,甚至更糟!,对于错误的值,如果日期和月份都低于13:
2017年5月4日
可以取为5月4日或4月5日。你永远不应该依赖于文化设置


XML并不意味着人类可读。或者用更好的话来说:它只是为了让技术人员能够阅读。。。它是结构化、复杂文档的标准化字符串表示形式。值的格式不应该困扰您!为演示文稿使用适当的编辑器

有几个正确的答案,但我觉得这些答案并不符合你的实际问题:


在我的表中有一个xml列,该xml列包含包括日期在内的大量数据,我想将这些日期更新为日期格式,如“2/28/2017”,现在日期格式如“2012-04-26T00:00:00”

如果我没有弄错,您希望将XML中存储的日期更改为另一种格式,对吗

简单的回答:不要

ISO8601是XML中日期/时间值的标准格式。您更想要的2017年2月28日
2
格式与区域性相关,可能会导致错误,甚至更糟!,对于错误的值,如果日期和月份都低于13:
2017年5月4日
可以取为5月4日或4月5日。你永远不应该依赖于文化设置

XML并不意味着人类可读。或者用更好的话来说:它只是为了让技术人员能够阅读。。。它是结构化、复杂文档的标准化字符串表示形式。值的格式不应该困扰您!为