[请协助我解释编码员如何创建这个出色的解决方案,我将简要解释一下表格:
select * from people
返回值:
name
Anibal Dorothea Tromp IV
挑战以多种方式解决,但一种解决方案令我惊讶:
select
substring(name, '^(.+)\s\S+\s\S+$') as name,
substring(name, '^.+\s(\S+)\s\S+$') as first_lastname,
substring(name, '^.+\s(\S+)$') as second_lastname
from people
返回结果:
name first_lastname second_lastname
Anibal Dorothea Tromp IV
实际表中有更多行,有些具有1个名字,另一些具有2个名字。因此,面临的挑战是用名字(名字)来区分名字,名字是一个不同长度的单词,有时超过一个单词。
如果我查看有关子字符串的文档,则没有提及此方法,请向我解释他的出色解决方案是如何工作的,或者将我指向一个解释该解决方案某些组件的站点。
非常感谢,蒂姆
[请协助我解释编码器是如何创建此出色解决方案的,我将简要解释一下表格:select * from people返回值:name Anibal Dorothea Tromp IV挑战是...
您要引用的这个特殊字符串称为正则表达式。正则表达式在许多RDBMS和编程语言中都可用。
尽管您可以像这样使用substring()
-并且有据可查–这似乎是split_part()
的一个好用例: