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