Sql 按字符顺序变化的时间字符串?

Sql 按字符顺序变化的时间字符串?,sql,postgresql,postgresql-9.1,Sql,Postgresql,Postgresql 9.1,我正在查询一个表,我试图通过一个“时间”列排序,该列的时间格式为“下午1-2点”,“上午7-8点”,“上午11点-下午12点”,等等。我不允许更改此列,但我想不出一个好方法来查询它,以便我可以通过asc或desc正确排序。我试着用PostgreSLQ子字符串方法查找职位或“a.m.”或“p.m.”,但仍然有问题。在查询中添加一个sortby列 select blah , case when timefield = "earlier than 1am" then 1 when timefield

我正在查询一个表,我试图通过
一个“时间”列
排序,该列的时间格式为“下午1-2点”,“上午7-8点”,“上午11点-下午12点”,等等。我不允许更改此列,但我想不出一个好方法来查询它,以便我可以通过
asc
desc
正确排序。我试着用PostgreSLQ子字符串方法查找职位或“a.m.”或“p.m.”,但仍然有问题。

在查询中添加一个sortby列

select blah
, case when timefield = "earlier than 1am" then 1
when timefield = "1-2 am" then 2
etc
else 20 end sortby
etc
order by sortby

我认为你可以这样做:

order by to_timestamp(time, 'HH a.m.');
以下是一个例子:

select time, to_timestamp(time, 'HH a.m.')
from (select '1 p.m. - 2 p.m.' as time union all
      select '9 a.m. - 10 a.m.' as time union all
      select '11 a.m. - 12 p.m.' as time
     ) t
order by to_timestamp(time, 'HH a.m.');

谢谢我照你说的做了,@mu is short说的把它放在订单上,它工作得很好,谢谢@muistooshort,我从来没有想过这样做。ORDER BY使用逗号分隔的表达式列表,列引用恰好是一个简单的表达式。