一个很难的问题(数据窗口的排序)
一个数据窗口,其中包含有时间的字段,数据如:'01:00:00','22:55:00','23:00:00','05:55:00'。
现在需要写一段sql,使得数据按照时间排序,其排序后的顺序是:'22:55:00','23:00:00','01:00:00','05:55:00'。
就是将'00:00:00'以后的数据按照第二天的数据算,由于没有日期字段,所以没有其他的参考字段,怎么排呢?
[解决办法]
截止到几点才算第二天的呢?假设以12点为分隔, 再假设时间列名为sj
如果是在datawindow中进行排序可以这么写:
setsort("if(long(left(sj,2)) < 12, string(long(left(sj,2)) + 24) + mid(sj, 3), sj) A ")
[解决办法]
如果是MSSQL,可以这么写,其他数据库类似:
select * from tborder by (case when cast(left(sj, 2) as tinyint) < 12 then cast((cast(left(sj, 2) as tinyint) + 24) as varchar(2)) + substring(sj, 3, 6) else sj end) asc
[解决办法]
没有日期,肯定不能直接排序。要不在sql中完成,要不像二楼讲的那样,截取字符后排序。