Skip to content Skip to sidebar Skip to footer

Sql While Loop Exists

I'm trying to get a list of dates from one cell in SQL. These dates are all in one cell in SQL '....d|43460)())(0||1(d|42534)())(0||2(d|40910)())(0||3(d|41855)...' I've managed to

Solution 1:

DECLARE @clndr_data varchar(MAX)    =   'd|43460)())(0||1(d|42534)())(0||2(d|40910)())(0||3(d|41855)'
DECLARE @walker     int             =   0
DECLARE @holder     varchar(MAX)    =   @clndr_data
DECLARE @date       varchar(5)
DECLARE @tempTb     table([value] varchar(50))

WHILE CHARINDEX('d|', @holder) > 0
BEGIN
    SET @walker = CHARINDEX('d|', @holder) + 2
    SET @date = (SELECT SUBSTRING(@holder, @walker, 5))
    INSERT INTO @tempTb VALUES (@date)
    SET @holder = SUBSTRING(@holder, @walker + 5, LEN(@holder))
END

SELECT * FROM @tempTb

Just replace @clndr_data with your actual clndr_data column. Don't forget to set @holder variable to the value of this column.

SET @holder = (SELECT clndr_data FROM [x].[dbo].[CALENDAR] WHERE clndr_id = '954')

DECLARE @walker     int             =   0
DECLARE @holder     varchar(MAX)
DECLARE @date       varchar(5)
DECLARE @tempTb     table([value] varchar(50))

SET @holder = (SELECT clndr_data FROM [x].[dbo].[CALENDAR] WHERE clndr_id = '954')

WHILE CHARINDEX('d|', @holder) > 0
BEGIN
    SET @walker = CHARINDEX('d|', @holder) + 2
    SET @date = (SELECT SUBSTRING(@holder, @walker, 5))
    INSERT INTO @tempTb VALUES (@date)
    SET @holder = SUBSTRING(@holder, @walker + 5, LEN(@holder))
END

SELECT * FROM @tempTb

Solution 2:

you can treat clndr_data as a delimited string and make use of delimited string splitter to split it into multiple item in a list. Here i am using ")(" as delimiter

Here i am using DelimitedSplit8K() by Jeff Moden from http://www.sqlservercentral.com/articles/Tally+Table/72993/

Note : you will need to create the function first

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|%'

Post a Comment for "Sql While Loop Exists"