我有具有一定值排序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