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

这只给我最后一个字符(数字),但我需要整个数字字符串
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]匹配单个字符.

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 'EastRiver' 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...