这只给我最后一个字符(数字),但我需要整个数字字符串
SELECT substring('123 Main Street' FROM '%#"[0-9]#"%' FOR '#')
这给了我相同的结果,但我需要它返回一个空白值:
SELECT substring('Main 123 Street' FROM '%#"[0-9]#"%' FOR '#')
注意:Postgres 7.4
有用的链接:http://www.postgresql.org/docs/7.4/static/functions-matching.html
更新:
SELECT substring('Main 123 Street' FROM '[0-9]+')
SELECT substring('123 Main Street' FROM '[0-9]+')
更新2:
几乎拥有它:
如果它不以数值开头,这给了我想要的结果:
SELECT
COALESCE(substring('Main 123 Street' FROM '[0-9]*') || 'Main 123 Street', ''),
substring('Main 123 Street' FROM '[0-9]*')
但这给了我两个,我只想要第二个条件:
SELECT
COALESCE(substring('123 Main Street' FROM '[0-9]*') || '123 Main Street', ''),
substring('123 Main Street' FROM '[0-9]*')
我知道了!感谢所有发布的人:
SELECT CASE
WHEN COALESCE(substring(db_column FROM '[0-9]*'), db_column) != '' THEN COALESCE(substring(db_column FROM '[0-9]*'), db_column)
ELSE db_column
END AS addsress_string
FROM db_table
答案 0 :(得分:8)
我不知道postgresql正则表达式语法,但在大多数正则表达式中你会写[0-9]+
。没有量词,[0-9]
匹配单个字符。
答案 1 :(得分:5)
我没有要测试的Postgres安装,但是这样的事情可能会起作用:
SELECT substring('123 Main Street' FROM '^[0-9]+')
如果不以数字开头,则不返回任何内容。如果你想要返回完整的字符串,这应该有效:
SELECT substring('123 Main Street' FROM '^[0-9]+|.*')
答案 2 :(得分:4)
也许现在就改善rmmh的答案还为时不晚。
这对我有用:
SELECT substring(column_name FROM '[0-9]+') FROM TableName;
在postgresql中,只需删除要显示的数字的插入符号。
如果column_name = 'XXXX-0001'
结果为:
0001