数据中心部分数据的标题是混合字符串与数组的,比如:
… site no. 1
… site no. 10
… site no. 2
之前,是按照title的字符进行升序排序了,排序结果就如上所示。这里和我们常规理解有所区别的就在于其排序是按照1、10、11、…、2、3进行排序的,而我们通常想要的结果是希望按照站点编号的自然数大小进行排序,即1、2、…、9、10…。
之前的sql语句是这样的:
… order by title
而要满足这个要求,第一个改造的结果是这样的:
… order by substring(title, ‘[^0-9]*’), (substring(title, ‘No.([0-9]+)’))::int
这样可以满足上面的需求,即No.1之类的标题可以排序,但若数字在中间就难以处理了,比如:
…10 July, 2012
…9 August, 2012
因此又继续改造:
…order by regexp_replace(title,'[0-9]+’,”,’g’),(substring(title, ‘([0-9]+)’))::int
这样可以解决上面的问题,但还是不完美,即有多个间断的数字,排序还是有问题的。
比如:
…10 July, 2012
…9 July, 2013
这种问题留待以后解决吧。
发表回复