definitely not worth it unless you are doing some sort of puzzle. as robvolk says you will parsing all day long and it will eventually bite you goodtear down and rebuild. declare @sqlfresh table(id int identity(1,1), value varchar(max))INSERT INTO @sqlfreshvalues('2.16.840.1.114222')INSERT INTO @sqlfreshvalues('2.16.840.1.114222.65.61')SELECT sq.id, Tags.val.value('.', 'VARCHAR(MAX)') AS policy#, CASE WHEN LEN(Tags.val.value('.', 'VARCHAR(MAX)')) > 4 THen Tags.val.value('.', 'VARCHAR(MAX)') ELSE REPLACE(POWER(10, 5 - LEN(Tags.val.value('.', 'VARCHAR(MAX)')) ), '1','') + Tags.val.value('.', 'VARCHAR(MAX)') END as yougi --, '0000' + REPLACE(value,'.','.0000') FROM( SELECT id, CAST('<t>' + REPLACE(value, '.', '</t><t>') + '</t>' AS XML) AS TAG FROM @sqlfresh ) TAB CROSS APPLY TAG.nodes('/t') as Tags(val) inner join @sqlfresh sq on sq.id = TAB.id ;with cteJunk(id, policy#, yougi, value) AS(SELECT sq.id, Tags.val.value('.', 'VARCHAR(MAX)') AS policy#, CASE WHEN LEN(Tags.val.value('.', 'VARCHAR(MAX)')) > 4 THen Tags.val.value('.', 'VARCHAR(MAX)') ELSE REPLACE(POWER(10, 5 - LEN(Tags.val.value('.', 'VARCHAR(MAX)')) ), '1','') + Tags.val.value('.', 'VARCHAR(MAX)') END as yougi, value FROM( SELECT id, CAST('<t>' + REPLACE(value, '.', '</t><t>') + '</t>' AS XML) AS TAG FROM @sqlfresh ) TAB CROSS APPLY TAG.nodes('/t') as Tags(val) inner join @sqlfresh sq on sq.id = TAB.id ) SELECT t1.id, value was , IsNow = substring((SELECT ( '.' + yougi ) FROM cteJunk t2 WHERE t1.id = t2.id ORDER BY id FOR XML PATH( '' ) ), 2, 1000 )FROM cteJunk t1GROUP BY id, value
<><><><><><><><><><><><><><><><><>If you don't have the passion to help people, you have no passion