Sql 从ORACLE DB中的名称字符串中提取姓氏
我正在编写一个小查询,从一组作者姓名数据库中提取所有姓氏。文件中的名称将包含名字和中间名,或者仅包含名字 约翰·史密斯 约翰·T·史密斯 所以我不能仅仅在第一个空间之后搜索。。。但我可以肯定的是,lastname应该是从字符串右侧的末尾到第一个空格。我真的不在乎名字 这就是我现在拥有的Sql 从ORACLE DB中的名称字符串中提取姓氏,sql,database,string,oracle,Sql,Database,String,Oracle,我正在编写一个小查询,从一组作者姓名数据库中提取所有姓氏。文件中的名称将包含名字和中间名,或者仅包含名字 约翰·史密斯 约翰·T·史密斯 所以我不能仅仅在第一个空间之后搜索。。。但我可以肯定的是,lastname应该是从字符串右侧的末尾到第一个空格。我真的不在乎名字 这就是我现在拥有的 select [name], LEFT([name], CHARINDEX(' ', [name] + ' ')-1) as firstName, SUBSTRING([name], charindex(' ',
select [name], LEFT([name], CHARINDEX(' ', [name] + ' ')-1) as firstName,
SUBSTRING([name], charindex(' ', [name]+' ') + 1, LEN([name])) as lastName
from Author
;
我是sql新手,非常感谢您的帮助!
提前谢谢
编辑:对于那些遇到这种需要帮助的人,这一行有助于:
select substr(t.string,instr(t.string,' ',-1)+1) last_word
对于Oracle DB,请尝试以下操作:
WITH t AS
(SELECT name AS l FROM <your query>
)
SELECT SUBSTR(l,instr(l,' ',-1)+1,LENGTH(l)) FROM t;
在这种情况下应该有效
select name, SUBSTRING_INDEX(name,' ',-1) as lastName from Author;
你确定你不必处理像戴高乐、马丁·范布伦、克里斯汀·斯科特·托马斯、海伦娜·邦汉·卡特、安东尼奥·加西亚·帕斯夸尔、马可·德内格罗、文森特·梵高、皮耶罗·德拉·弗朗西斯卡这样的复合姓氏吗?如果是这样的话,姓氏仍然是最后一个字。请注意,如果不手动查看数据,仅从姓氏中提取最后一个“字”将导致一系列问题。这与查尔斯·戴高乐的姓氏是戴高乐有关:不是戴高乐。太棒了!我想对于我正在处理的数据库,我不需要处理姓氏。谢谢!但当我用左键时。。。部分,它抛出了ORA-00904:左:无效标识符错误。哦,没看到那是Oracle db。这里有一个链接:这正是我要找的。非常感谢。我在第1行得到这个错误:ORA-00904:子字符串索引:无效标识符,有什么想法吗?这是一个Oracle问题。