sql-如何使用substr或regexp\u like/regexp\u replace来接收某人的姓氏。例如玛丽亚·安德森-我只需要结果中的安德森。谢谢您
kgqe7b3p1#
假设你有 regexp_substr() (在oracle中),您可以执行以下操作:
regexp_substr()
select regexp_substr(name, '[^ ]+$')
或使用 regexp_replace() :
regexp_replace()
select regexp_replace(name, '^.* ([^ ]+)$', '\1')
xiozqbni2#
使用regexp或substr实现这一点并不容易,因为这两个方法都不知道“名称”或“姓氏”。您可以从最后一个空格开始提取“字符串的最后一个字”(在regexp中是“锚定到字符串$结尾的最后一个非空格序列”): \S+$ 或者 (.*\S)\s+(\S+)$ ,这样“john de beers”就会给你一个“john de”的名字和一个“beers”的姓氏。正确的方法是使用名数据库,并运行更复杂的操作来提取匹配项。这将给你几个不匹配的名字,你将不得不选择要么回落到“最后一句话”的方法(这是足够好的),或手动审查为什么“约翰威尔克斯布斯”是不被承认。
\S+$
(.*\S)\s+(\S+)$
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
3条答案
按热度按时间kgqe7b3p1#
假设你有
regexp_substr()
(在oracle中),您可以执行以下操作:或使用
regexp_replace()
:xiozqbni2#
使用regexp或substr实现这一点并不容易,因为这两个方法都不知道“名称”或“姓氏”。
您可以从最后一个空格开始提取“字符串的最后一个字”(在regexp中是“锚定到字符串$结尾的最后一个非空格序列”):
\S+$
或者(.*\S)\s+(\S+)$
,这样“john de beers”就会给你一个“john de”的名字和一个“beers”的姓氏。正确的方法是使用名数据库,并运行更复杂的操作来提取匹配项。这将给你几个不匹配的名字,你将不得不选择要么回落到“最后一句话”的方法(这是足够好的),或手动审查为什么“约翰威尔克斯布斯”是不被承认。
bnlyeluc3#
在sqlite中,可以使用字符串函数:
with t as (select 'Maria Anderson' name)
select name, substr(name, instr(name, ' ') + 1) surname from t