Postgresql - 如何从字符串和没有结束数值的字符串的末尾获取数值

Postgresql - How to get numeric value from the end of string and string without end numeric value

我在 Postgresql 用户 table 中有以下用户名。

**username**
test
123test
123test456
test123
test45test
test55test55

所以我试图分别获取没有结束数值和结束数值的字符串。

我期待以下输出

str          num
----------------
test         0
123test      0
123test      456
test         123
test45test   0
test55test   55

如何编写将 return 以上结果的 Postgresql 查询?

您可以使用 regexp_replace()substring():

select
    regexp_replace(username, '\d+$', '') str,
    coalesce(substring(username from '\d+$')::int, 0) num
from mytable

Demo on DB Fiddlde:

with mytable as (
    select 'test' username
    union all select '123test'
    union all select '123test456'
    union all select 'test123'
    union all select 'test45test'
    union all select 'test55test55'
)
select
    regexp_replace(username, '\d+$', '') str,
    coalesce(substring(username from '\d+$')::int, 0) num
from mytable
str        | num
:--------- | --:
test       |   0
123test    |   0
123test    | 456
test       | 123
test45test |   0
test55test |  55