SQL - 无法将字符串转换为YYYYMMDD格式

时间:2013-11-23 09:21:54

标签: sql sql-server date type-conversion sqlxml

我有一个表,其中一列是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

为什么?

1 个答案:

答案 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