这只是给我最后一个字符(数字),但我需要整个数字字符串
SELECT substring('123 Main Street' FROM '%#"[0-9]#"%' FOR '#')
- 结果:3
- 预期:123
这给了我相同的结果,但我需要它返回一个空白值:
SELECT substring('Main 123 Street' FROM '%#"[0-9]#"%' FOR '#')
- 结果:3
- 期望:
注意: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]+')
- 现在都返回:123
- 仍然需要跳过或返回完整字符串:'Main 123 Street'
更新 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
最佳答案
我不知道 postgresql 正则表达式语法,但在大多数正则表达式中你会写成 [0-9]+
。如果没有量词,[0-9]
匹配单个字符。
关于sql - 仅当字符串以数字值开头时才选择字符串的数字部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5651949/