sql-如何使用subsrt或reegexp\ like来获得一个人的姓氏例如玛丽亚·安德森-我只需要安德森谢谢您

hxzsmxv2  于 2021-08-09  发布在  Java
关注(0)|答案(3)|浏览(273)

sql-如何使用substr或regexp\u like/regexp\u replace来接收某人的姓氏。例如玛丽亚·安德森-我只需要结果中的安德森。谢谢您

kgqe7b3p

kgqe7b3p1#

假设你有 regexp_substr() (在oracle中),您可以执行以下操作:

select regexp_substr(name, '[^ ]+$')

或使用 regexp_replace() :

select regexp_replace(name, '^.* ([^ ]+)$', '\1')
xiozqbni

xiozqbni2#

使用regexp或substr实现这一点并不容易,因为这两个方法都不知道“名称”或“姓氏”。
您可以从最后一个空格开始提取“字符串的最后一个字”(在regexp中是“锚定到字符串$结尾的最后一个非空格序列”): \S+$ 或者 (.*\S)\s+(\S+)$ ,这样“john de beers”就会给你一个“john de”的名字和一个“beers”的姓氏。
正确的方法是使用名数据库,并运行更复杂的操作来提取匹配项。这将给你几个不匹配的名字,你将不得不选择要么回落到“最后一句话”的方法(这是足够好的),或手动审查为什么“约翰威尔克斯布斯”是不被承认。

bnlyeluc

bnlyeluc3#

在sqlite中,可以使用字符串函数:

select substr(name, instr(name, ' ') + 1)
``` `instr(name, ' ')` 给出字符串中第一个空格的位置。那么 `substr()` 返回从后面第一个字符到字符串结尾的所有内容。
db小提琴演示:

with t as (select 'Maria Anderson' name)
select name, substr(name, instr(name, ' ') + 1) surname from t

namesurname
Maria AndersonAnderson

相关问题