替換計算值我有一個包含字符串的表列numbers
像:postgres的在文本
1, 2, 2A, 14, 14A, 20
列於期望的升序排列。
我怎樣才能制定一個ORDER BY
子句來實現這個順序?
每默認情況下,Postgres的有訴諸字母順序具體做法是:
1, 2, 14, 20, 2A, 14A
可以這樣做僅使用字符串操作功能,配備了Postgres的? (replace()
,regex_replace()
等?)
我的第一個想法是:
- 切的信,如果存在
- 數* 100
- 加字母的ASCII碼,如果存在
這將產生期望的結果,因爲映射值將是:
100, 200, 265, 1400, 1465, 2000
我也可以索引這個操縱值來加快排序。
附加限制:
我不能使用強制類型轉換爲十六進制的數字,因爲如:14Z
有效了。
理想情況下,結果是單個表達式。我需要用這種轉變的篩選和排序,如:
SELECT * FROM table WHERE transform(numbers) < 15 ORDER BY transform(numbers)
RESULT:
1, 2, 2A, 14, 14A
我想實現我的想法,用我學到的東西從@克林的回答是:
切的信再乘以100號:
substring('12A' from '(\d+).*')::int*100
削減的數量和獲得信ASCII:
ascii(substring('12A' from '\d+([A-Z])'))
加兩個。
這正常工作與12A
,但不與12
工作,因爲第二個表達式返回NULL
,而不是0
(數字零)。有任何想法嗎?
BTW,你會使用'WHERE變換(數字)<1500'爲例,因爲transform()乘以100. –
我會使用變換(數字)<變換('15') – billdoor
是的,甚至更好。 –