部分转换sql结果

时间:2016-12-15 19:44:08

标签: sql sql-server

我有一个返回一些看似09/25/2016, 10/16/2016, 10/23/2016的数据的查询,我想将其转换为类似Sept 25, 2016, Oct 16,2016, Oct 23,2016的内容。我知道我可以将字符串转换为日期,然后返回到我希望使用Convert(nvarchar(20),CONVERT(datetime, '09/25/2016', 102), 107)这样的查询的字符串,但不知道如何转换部分数据并构建或可能转换的内容整个东西。

2 个答案:

答案 0 :(得分:3)

你真的需要修复你的表模式,无论如何要在你需要做某些事情之后得到你的东西.....(只有当你遵循简单的数据规则时,这才会是一个更简单的查询normilization)。

示例数据

declare @T Table (ID INT , DateValues VARCHAR(1000)) 
INSERT INTO @T VALUES
(1 , '09/25/2016, 10/16/2016, 10/23/2016'),
(2 , '10/25/2016, 11/16/2016, 12/24/2016');

<强>查询

WITH X AS (
SELECT  ID
        , CONVERT( VARCHAR(12) 
                 , CAST(LTRIM(RTRIM(Split.a.value('.', 'VARCHAR(100)'))) AS DATETIME) 
                 , 107) Dates
FROM   
    (SELECT  ID
            ,Cast ('<X>' + Replace(DateValues, ',', '</X><X>') + '</X>' AS XML) AS Data
    FROM    @T
    ) AS t CROSS APPLY Data.nodes ('/X') AS Split(a) 
)
SELECT ID
     ,STUFF((SELECT ', ' +  Dates
             FROM X b 
             WHERE a.id = b.id 
             FOR XML PATH(''),TYPE).value('.','VARCHAR(MAX)'),1,2,'') AS DateValues
FROM X a
GROUP BY ID

<强>输出

╔════╦══════════════════════════════════════════╗
║ ID ║                DateValues                ║
╠════╬══════════════════════════════════════════╣
║  1 ║ Sep 25, 2016, Oct 16, 2016, Oct 23, 2016 ║
║  2 ║ Oct 25, 2016, Nov 16, 2016, Dec 24, 2016 ║
╚════╩══════════════════════════════════════════╝

答案 1 :(得分:0)

请尝试以下方法:

SELECT FORMAT(GETDATE(),'MMM dd, yyyy')

将GETDATE()替换为您想要的任何日期