Sql server SQL Server中XML列中的日期转换
如何转换下面提到的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
<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并不意味着人类可读。或者用更好的话来说:它只是为了让技术人员能够阅读。。。它是结构化、复杂文档的标准化字符串表示形式。值的格式不应该困扰您!为