• Quick solution which uses dbo.DelimitedSplit8K[/url]

    😎

    USE tempdb;

    GO

    SET NOCOUNT ON;

    DECLARE @SAMPLE_STR VARCHAR(500) = 'adventure,devotion,for children,happiness,imagination,love,world,lovely,confusion,introspection,on work and working,on writing and words,';

    DECLARE @SEARCH_WORD VARCHAR(50) = 'lovely';

    DECLARE @WORD_COUNT INT = 3;

    ;WITH WORD_LIST AS

    (

    SELECT

    WL.ItemNumber

    ,WL.Item

    ,MAX(CASE

    WHEN WL.Item = @SEARCH_WORD THEN WL.ItemNumber

    ELSE 0

    END) OVER

    (

    PARTITION BY (SELECT NULL)

    ) AS WL_FLAG

    FROM dbo.DelimitedSplit8K(@SAMPLE_STR,',') AS WL

    )

    SELECT

    STUFF( (SELECT

    ',' + W.Item

    FROM WORD_LIST W

    WHERE W.ItemNumber BETWEEN W.WL_FLAG - @WORD_COUNT AND W.WL_FLAG + @WORD_COUNT

    FOR XML PATH(''),TYPE).value('.[1]','VARCHAR(500)')

    ,1,1,'') AS OUTPUT_STR;

    Results

    OUTPUT_STR

    --------------------------------------------------------------------------

    imagination,love,world,lovely,confusion,introspection,on work and working