В SQL 2008 существует тип данных TIME, который идеально подходит для этого - я бы действительно рекомендовал переключать тип данных для этого поля - используйте наименьший, наиболее подходящий тип данных для данных, которые он содержит.
Предполагая, что все значения являются действительными временами, вот полный пример, чтобы продемонстрировать:
CREATE TABLE #Example
(
PublishTime NVARCHAR(MAX)
)
-- Insert some sample data
INSERT #Example (PublishTime) VALUES ('10:20AM'), ('10:20PM'), (NULL), ('')
-- Demonstrate the NVARCHAR -> TIME conversion
SELECT PublishTime, CAST(PublishTime AS TIME) AS ConvertedToTimeDataType
FROM #Example
-- This will change the datatype on the table
ALTER TABLE #Example
ALTER COLUMN PublishTime TIME
-- Now check what is now in the table
SELECT * FROM #Example
DROP TABLE #Example
Итак, если вы можете переключить тип данных, вы можете сделать:
SELECT Something
FROM YourTable
ORDER BY PublishTime
Не требуется преобразование / специальная обработка поля, что означает, что если в PublishTime имеется подходящий индекс, его можно будет использовать.