我有一个返回一些看似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)
这样的查询的字符串,但不知道如何转换部分数据并构建或可能转换的内容整个东西。
答案 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()替换为您想要的任何日期