首页 > 解决方案 > SQL While 循环存在

问题描述

我正在尝试从 SQL 中的一个单元格获取日期列表。这些日期都在 SQL 中的一个单元格中"....d|43460)())(0||1(d|42534)())(0||2(d|40910)())(0||3(d|41855)..." 我设法编写了一个获取第一个日期的查询

SELECT Substring (clndr_data , CHARINDEX('d|', clndr_data)+2, 5)
FROM [x].[dbo].[CALENDAR]
where clndr_id = '954'

我需要获取所有其他日期,所以我假设我必须使用 While 或 Loop 来获取 'd|' 之后的所有日期?如果有人可以提供帮助,将不胜感激。

所需输出(这应该是一个列表,但我不能在这里显示):

Number Date
43460 26/12/2018
42534 13/06/2016
40910 02/01/2012

标签: sqlsql-server

解决方案


您可以将clndr_data其视为分隔字符串并使用分隔字符串拆分器将其拆分为列表中的多个项目。在这里我")("用作分隔符

这里我使用DelimitedSplit8K()的是来自http://www.sqlservercentral.com/articles/Tally+Table/72993/的 Jeff Moden

注意:您需要先创建函数

SELECT  clndr_data, right(Item, 5) as Number
FROM    [x].[dbo].[CALENDAR]
        CROSS APPLY dbo.DelimitedSplit8K(clndr_data, ')(')
where   clndr_id = '954'
and     Item    like '%d|%'

推荐阅读