Hi,
One solution is converting your data to seconds either on the fly or by using a user defined function.
Here is a SQL statement that converts your data to seconds on the fly :
SELECT * FROM (
SELECT Duration ,
CASE
WHEN CHARINDEX(':',Duration )=0 THEN
CAST (Duration AS DECIMAL(10,2))
WHEN CHARINDEX(':',Duration, CHARINDEX(':',Duration)+1) = 0 THEN
CAST(SUBSTRING(Duration, 1, CHARINDEX(':',Duration)-1) *60 AS DECIMAL(10,2))
+ CAST(SUBSTRING(Duration, CHARINDEX(':',Duration)+ 1 , LEN(Duration)) AS DECIMAL(10,2))
WHEN CHARINDEX(':',Duration, CHARINDEX(':',Duration)+1) >0 THEN
CAST(SUBSTRING(Duration, 1, CHARINDEX(':',Duration)-1) *3600.0 AS DECIMAL(10,2))
+ CAST(SUBSTRING(Duration,CHARINDEX(':',Duration)+ 1 , CHARINDEX(':',Duration , CHARINDEX(':',Duration)+1 ) - CHARINDEX(':',Duration) -1)*60 AS DECIMAL(10,2))
+ CAST(SUBSTRING(Duration, CHARINDEX(':',Duration , CHARINDEX(':',Duration)+1 ) +1 , LEN(Duration) ) AS DECIMAL(10,2))
ELSE 'unknown format' END AS seconds
from
(
Select '33:14:14' as 'Duration'
UNION
Select '1:16:36' as 'Duration'
UNION
Select '0:3.1' as 'Duration'
UNION
Select '0:3' as 'Duration'
UNION
Select '0.03' as 'Duration'
UNION
Select '0:29' as 'Duration'
UNION
Select '0:31' as 'Duration'
UNION
Select '3:0' as 'Duration'
UNION
Select '0:29' as 'Duration'
UNION
Select '02:12:39' as 'Duration'
)
as a
) AS b
ORDER BY seconds
Good Luck.