我有具有一定值排序varchar列,字符
A1A1A
A1A2A
A1A101A
A3A5A
12
A2
A3
一个varchar column [flat_number]
我希望得到按数量排序结果,然后由第一
像
12
A2
A3
A1A1A
A1A2A
A1A101A
A3A5A
字符
我设法用数字进行排序(如果列只包含使用正则表达式0-9数字,我把它当作一个数字),然后我用字符排序,但它dosent似乎对科拉姆工作n个值作为A1A101A(具有数字和字符的多个组合)
CASE
WHEN length(flat_number) < 10 AND flat_number SIMILAR TO '[0-9]+'
THEN
flat_number::int
END
ELSE
NULL
END,
(SELECT COALESCE(match[1], NULL) FROM regexp_matches(flat_number, '[^0-9]+') AS match),
(SELECT COALESCE(left(match[1], 9), NULL) FROM regexp_matches(flat_number, '([0-9]+$)') AS match)::int
当前查询工作原理
如果列仅包含数字[0-9]我将其转换为int和其他排序它 我拆分柱分成2份,并尝试以提取在开始时的列字符和结束时的数量。
是否有更好的等待这样做,并且确保所期望的输出返回
在第一个SELECT语句COALESCE为什么不将数字转换成字符,然后对它们进行排序呀? – AlexLordThorsen 2013-02-15 19:13:04
转换的数字字符将它们排序为,1,10,2 – Akash 2013-02-16 03:31:07