PostgreSQL по порядку, номера последние - PullRequest
2 голосов
/ 20 июня 2020

name2 может быть строкой или числом. Т.е. 'one two' или 12

Я хотел бы упорядочить имена так, чтобы номера были последними, например:

a a
b b
one two
1
22
select name1, name2 
from names 
order by name2

Q: как это сделать?

PS в oracle это как это .

Ответы [ 2 ]

2 голосов
/ 20 июня 2020

Вы можете использовать логическое выражение в order by, например:

select name1, name2 
from names 
order by left(name2, 1) <= '9', name2

Db <> fiddle.

2 голосов
/ 20 июня 2020

Вы можете использовать функцию REGEXP_REPLACE() с '[^[:digit:]]*' posix, чтобы определить, есть ли в строке di git или нет, включая звездочку в конце, чтобы привязать регулярное выражение к концу исходного текста :

SELECT name2
  FROM t
 ORDER BY REGEXP_REPLACE(name2,'[^[:digit:]]*',''), name2

Демо

...