我有一个表,其中一列是XML数据类型。 此XML值包含如下所示的TimePeriod值:
"{start:{align:'Start',date:'2011-05-20T00:00:00'}"
我设法使用以下查询从此字符串中仅提取日期:
SELECT SUBSTRING(configuration.value('(/ActiveService/@TimePeriod)[1]','nvarchar(50)'),
CHARINDEX('''', configuration.value('(/ActiveService/@TimePeriod)[1]','nvarchar(50)'),28)+1,10 )
FROM [MySystem].[dbo].[MyServices]
所以我得到了这个结果:2013-11-01
但是,现在我需要将其转换为以下格式:YYYYMMDD
当我使用CONVERT格式化112时,我仍然得到相同的结果:2013-11-01
为什么?
答案 0 :(得分:3)
你从xml中获取值作为varchar,你不能将它转换为格式YYYYMMDD(因为它已经是varchar),你必须将它转换为日期(或者首先是日期时间):
select convert(varchar(8), convert(datetime,
substring(
@data.value('(/ActiveService/@TimePeriod)[1]','nvarchar(50)'), 29, 10
), 120), 112)
但在您的情况下,通过-
删除replace(<your value>, '-', '')
可能会更容易。
<强> sql fiddle demo 强>