Sql 仅当字符串以数值开头时,才选择字符串的数字部分

Sql 仅当字符串以数值开头时,才选择字符串的数字部分,sql,regex,postgresql,conditional,Sql,Regex,Postgresql,Conditional,这只是给我最后一个字符(数字),但我需要整个数字字符串 SELECT substring('123 Main Street' FROM '%#"[0-9]#"%' FOR '#') 结果:3 预期:123 这会给我相同的结果,但我需要它返回一个空白值: SELECT substring('Main 123 Street' FROM '%#"[0-9]#"%' FOR '#') 结果:3 期望: 注:博士后7.4 有用链接: 更新: SELECT substring('Main 123

这只是给我最后一个字符(数字),但我需要整个数字字符串

SELECT substring('123 Main Street' FROM '%#"[0-9]#"%' FOR '#')
  • 结果:3
  • 预期:123
这会给我相同的结果,但我需要它返回一个空白值:

SELECT substring('Main 123 Street' FROM '%#"[0-9]#"%' FOR '#')
  • 结果:3
  • 期望:
注:博士后7.4

有用链接:

更新:

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]
只匹配一个字符。

我没有Postgres安装可供测试,但类似的方法可能会起作用:

从“^[0-9]+”中选择子字符串(“123大街”)

如果它不是以数字开头,则不会返回任何内容。如果您想返回完整字符串,则应该这样做:


从“^[0-9]+|.*”中选择子串(“123大街”)

也许现在改进rmmh的答案还不算太晚

这对我很有用:

SELECT substring(column_name FROM '[0-9]+') FROM TableName;
在postgresql中,只需删除要显示的数字的插入符号

如果
column\u name='XXXX-0001'
结果将是:

0001

嗯,让我看一下不同的语法,+1是用来对以数字开头的字母数字值进行排序的吗?不,如果以数字开头,我想返回一个部分地址,否则在同一个查询中,两个条件都要返回一个完整的addressone字段?