--sql server
declare @data table(
lineid int identity,
a varchar(100),
b varchar(100),
hr varchar(20),
[minute] varchar(20),
[second] varchar(20)
)
insert @data(a) select 'PT0S'
insert @data(a) select 'PT6H4M29.212S'
insert @data(a) select 'PT0S'
insert @data(a) select 'PT2M55.126S'
insert @data(a) select 'PT54M4.12S'
insert @data(a) select 'PT3H6M5.74S'
insert @data(a) select 'PT16H27M52.069S'
update @data
set b = replace(a,'PT','')
update @data
set hr = LEFT(b,charindex('H',b))
update @data
set b = REPLACE(b,hr,'')
update @data
set [minute] = LEFT(b,charindex('M',b))
update @data
set b = REPLACE(b,[minute],'')
update @data
set [second] = LEFT(b,charindex('S',b))
update @data
set b = REPLACE(b,[second],'')
update @data
set [hr] = REPLACE([hr],'H',''),[minute]=REPLACE([minute],'M',''),[second]=REPLACE([second],'S','')
update @data
set hr = isnull(nullif(hr,''),'0'),[minute] = isnull(nullif([minute],''),'0'),[second] = isnull(nullif([second],''),'0')
select *,
[hr] + ' hour'+ case when hr <> '1' then 's ' else ' ' end +
[minute] + ' minute'+ case when [minute] <> '1' then 's ' else ' ' end +
[second] + ' second(s)'
from @data