This might work for you, but be aware - this will not work when field contains < or >with yourtable (yourfield) as (select 'A#B#C' as yourfield union all select 'A#B' as yourfield union all select 'A#B#C#D' as yourfield )select convert(xml,'<f>'+replace(yourfield,'#','</f><f>')+'</f>').value('/f[1]','varchar(10)') as col1 ,convert(xml,'<f>'+replace(yourfield,'#','</f><f>')+'</f>').value('/f[2]','varchar(10)') as col2 ,convert(xml,'<f>'+replace(yourfield,'#','</f><f>')+'</f>').value('/f[3]','varchar(10)') as col3 ,convert(xml,'<f>'+replace(yourfield,'#','</f><f>')+'</f>').value('/f[4]','varchar(10)') as col4 from yourtable