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
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
我在 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
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