Here you go... I modified the ORDER BY clause a bit to make it less dependent on the field datatype (not that it matters). And in the second example I originally overlooked the '-' sign (so it added 6 instead of subtracting)... That's what happens when you don't review something before posting.
Anyhow, this time I actually checked things over. use pubsgo--Create some sample datacreate table mytable (blah int, mysortfld varchar (7), mydate datetime)insert into mytable values (rand() * 10, '6xyxkfd', CONVERT(datetime, '03:12:00',108))insert into mytable values (rand()* 10, null, CONVERT(datetime, '07:12:00',108))insert into mytable values (rand()* 10, '5xyxkfd', CONVERT(datetime, '09:12:00',108))insert into mytable values (rand()* 10, '4xyxkfd', CONVERT(datetime, '10:22:00', 108))insert into mytable values (rand()* 10, '3xyxkfd', null)insert into mytable values (rand()* 10, '5xyxkfd', CONVERT(datetime, '02:12:00',108))insert into mytable values (rand()* 10, null, CONVERT(datetime, '11:12:00',108))insert into mytable values (rand()* 10, '1xyxkfd', CONVERT(datetime, '12:12:00',108))insert into mytable values (rand()* 10, '2xyxkfd', CONVERT(datetime, '08:12:00',108))insert into mytable values (rand()* 10, '1xyxkfd', null)-- return everythingselect * from mytable-- nulls sorted at the end SELECT blah, mysortfldFROM mytableORDER BY CASE WHEN mysortfld is null THEN 2 ELSE 1 END, mysortfld-- 6hrs subtracted unless date is nullSELECT blah, CASE WHEN mydate IS NULL THEN NULL ELSE DATEADD(hh, -6, mydate) END as datesFROM mytabledrop table mytable