1

我正在查询一个表,我正在尝试Order By一个“时间”列,其时间格式为“1 - 2 pm”、“7 - 8 am”、“11 am - 12 pm”等。我m 不允许更改此列,但我想不出查询它的好方法,以便我可以通过ascor正确排序desc。我尝试查找位置或“am”或“pm”并使用 PostgreSLQ 子字符串方法,但我仍然遇到问题。

4

2 回答 2

2

在查询中添加 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
于 2013-08-08T19:38:14.230 回答
1

我认为你可以这样做:

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.');
于 2013-08-08T19:50:31.917 回答