Tried both solutions in one batch (and displayed the actual execution plan just to see the winner):
declare @t table (ID int identity(1,1) primary key, htmlString nvarchar(max)) insert into @t (htmlString) values ('Number of Sales: <Area="ABC" Number="1012,1013,1014,1015">4</a><ZZ>END'), ('Number of Sales: <Area="CBA" Number="1011,1012,1013,1014,1015,1016,1017,1018,1019,1020">10</a><YY>END'), ('Number of Sales: <Area="XBA" Number="">0</a><XX>END'), ('No Sales were happened: SPANISH<UV>END') ;with cte as ( select *, substring(htmlString, NULLIF(patindex('% Number="%">%', htmlString),0) + len(' Number="'), len(htmlString)) as OrderNumbers, substring(htmlString, NULLIF(patindex('%">%', htmlString),0) + 2, len(htmlString)) as NumberStart from @t) select Id, htmlString, NULLIF(ISNULL(substring(OrderNumbers, 1, NULLIF(PATINDEX('%">%', OrderNumbers),0)-1), 'N/A'),'') as OrderNumbers, ISNULL(substring(NumberStart, 1, NULLIF(PATINDEX('%</a>%', NumberStart),0)-1), 'N/A') as [Values] from cte ;WITH rs AS ( SELECT * , TRY_CAST(REPLACE(LEFT(htmlString, PATINDEX('%</a>%', htmlString) + LEN('</a>')-1) , 'Number of Sales: <', '<a ') AS XML) AS xmldata FROM @t ) SELECT ID --, xmldata , xmldata.value('(/a/@Number)[1]', 'VARCHAR(1024)') AS [OrderNumbers] , xmldata.value('(/a/text())[1]', 'INT') AS [Values] FROM rs;
Looking for new opportunities
For every expert, there is an equal and opposite expert. - Becker's Law
My blog
My TechNet articles