• So I tested with adding the last line in the where clause to get only valid start and end position, and it worked but of course I am missing data where ss1 or ss2 do not exist

    I Assume I am getting a negative position ?

    SELECT

    ASSESSMENT_DATA,

    start1.pos1,

    [end1].pos1,

    nullif(SUBSTRING(ASSESSMENT_DATA,start1.pos1,[end1].pos1-start1.pos1),'') as ss1,

    nullif(SUBSTRING(ASSESSMENT_DATA,start2.pos2,[end2].pos2-start2.pos2),'') as ss2

    FROM USER_DEFINED_DATA

    CROSS APPLY (SELECT pos1 = LEN('@@T_400_ = "') + CHARINDEX('@@T_400_ = ',ASSESSMENT_DATA,1)) start1

    CROSS APPLY (SELECT pos1 = CHARINDEX('"@@T_501',assessment_data,start1.pos1)) [end1]

    CROSS APPLY (SELECT pos2 = LEN('@@T_401_ = "') + CHARINDEX('@@T_401_ = ',ASSESSMENT_DATA,1)) start2

    CROSS APPLY (SELECT pos2 = CHARINDEX('"@@T_502',assessment_data,start2.pos2)) [end2]

    WHERE ASSESSMENT_MONIKER = '4D17FC8EFA484E8B884E5F1C9B3D55DB'

    AND ASSESSMENT_DATA IS NOT NULL

    AND (start1.pos1 > 0AND [end1].pos1 > start1.pos1) and (start2.pos2 > 0AND [end2].pos2 > start2.pos2))