• OK. Yeah, i thought about making that assumption as well. At this point I am not sure if that is a fair assumption though.

    Here is what i have come up with so far with the cursor. So far it actually seems to be working. One thing i need to work out yet is how to get to the end of that first customer chat line. For now i am just finding the first non matching name, and they backing up 13 chars from that bracket position to get the BR tag and the timestamp, and then grabbing everything after that. While this may not be the most efficient, I am super stoked that I have managed to get this close to the goal!

    DECLARE @CursorID as int;/*For Cursor */

    DECLARE @CursorFirstName as varchar(max);/*For Cursor */

    DECLARE @CursorTextHTML as nvarchar(max);/*For Cursor */

    DECLARE db_cursor CURSOR FOR

    SELECT A.ID, U.FirstName, A.TextHTML

    from CustServ.Multimedia.Actions A INNER JOIN CustServ.Multimedia.Users U on A.Agent = U.ID

    WHERE A.[Type] = 9 AND A.CreationTime >= '2012-10-26 00:00:00' AND A.TimeAllocated > 0 AND A.TextHTML IS NOT NULL

    --and A.ID = 6831190

    OPEN db_cursor

    FETCH NEXT FROM db_cursor INTO @CursorID, @CursorFirstName, @CursorTextHTML

    WHILE @@FETCH_STATUS = 0

    BEGIN

    DECLARE @LftBracketOccurences as int = len(@CursorTextHTML) - len(replace(@CursorTextHTML, '[', ''))

    DECLARE @TextHTMLTemp as nvarchar(max) = @CursorTextHTML

    DECLARE @BracketName as varchar(max) = SUBSTRING(@TextHTMLTemp, CHARINDEX('[', @TextHTMLTemp , 1) + 1, CASE WHEN (CHARINDEX(']', @TextHTMLTemp , 0) - CHARINDEX('[', @TextHTMLTemp, 0)) > 0 THEN CHARINDEX(']', @TextHTMLTemp, 0) - CHARINDEX('[', @TextHTMLTemp, 0) - 1 ELSE 0 END)

    DECLARE @LeftPointer as int = 0

    DECLARE @RightPointer as int = 0

    DECLARE @LftBracketPos as int = charindex('[', @TextHTMLTemp, @LeftPointer)

    DECLARE @RtBracketPos as int = charindex(']', @TextHTMLTemp, @RightPointer)

    DECLARE @LoopCounter as int = 0

    DECLARE @FoundIt as int = 0

    WHILE (@LoopCounter < @LftBracketOccurences) and (@FoundIt < 1)

    BEGIN

    IF (@CursorFirstName = @BracketName)

    BEGIN

    --select @CursorID, @LftBracketOccurences as LftBracketOccurences, @CursorFirstName as RecordName, @BracketName as BracketName, @LftBracketPos as LftBracketPos, @RtBracketPos as RtBracketPos

    SET @LeftPointer = @LftBracketPos +1

    SET @RightPointer = @RtBracketPos +1

    SET @LftBracketPos = charindex('[', @TextHTMLTemp, @LeftPointer)

    SET @RtBracketPos = charindex(']', @TextHTMLTemp, @RightPointer)

    SET @BracketName = SUBSTRING(@TextHTMLTemp, @LftBracketPos, @RtBracketPos-@LftBracketPos)

    --select @CursorID, @LftBracketOccurences as LftBracketOccurences, @CursorFirstName as RecordName,@BracketName as BracketName, @LftBracketPos as LftBracketPos, @RtBracketPos as RtBracketPos

    END

    ELSE

    BEGIN

    SELECT substring(@TextHTMLTemp,@LftBracketPos-13, len(@TextHTMLTemp)) -- need to find way to get end of string!!!

    SET @FoundIt = 1

    END

    --select @CursorID, @LftBracketOccurences as LftBracketOccurences, @BracketName as BracketName, @LftBracketPos as LftBracketPos, @RtBracketPos as RtBracketPos

    SET @LoopCounter = @LoopCounter + 1

    END --while

    FETCH NEXT FROM db_cursor INTO @CursorID, @CursorFirstName, @CursorTextHTML

    END

    /* closes and cleans up after cursor */

    CLOSE db_cursor

    DEALLOCATE db_cursor