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

标签 sql regex postgresql conditional-statements

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

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/

相关文章:

mysql - 错误代码 : 1242. 子查询返回超过 1 行(对于所有记录)

mysql - 如何从多个表中加入 SELECT,其中 SELECTS 基于不同的条件?

java - 用 File.separator 替换所有 "/"

sql - Postgres : integer out of range. 为什么会出现这个错误?

sql - POSTGRESQL:创建表作为选择特定类型的列

asp.net-mvc - Postgres + EF Core 不区分大小写的唯一约束

sql - 使用 SQL Server 作为具有多个客户端的数据库队列

mysql - 映射列表的 SQL 查询语法

java - 正则表达式获取@符号后的字符串

C# 正则表达式匹配 TEXT 中的关键字并在匹配周围获取几个单词