Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PostgreSQL中获取个人姓氏的最可读方法_Postgresql - Fatal编程技术网

在PostgreSQL中获取个人姓氏的最可读方法

在PostgreSQL中获取个人姓氏的最可读方法,postgresql,Postgresql,我只想得到我数据库中的人的姓氏。 如果我叫“约翰·麦卡因·威廉”,我想要“麦卡因·威廉”。 我发现这样做的方法是使用以下解决方案: RIGHT(person.name, length(person.name) - (length(split_part(person.name, ' ', 1)) + 1)) 这样,我得到整个字符串的长度,从名字中减去长度,得到姓氏-1的长度(这样就不会有空格作为第一个字母),然后用“RIGHT Function”来“剪切”字符串。但它不是很可读,而且很难看。有更

我只想得到我数据库中的人的姓氏。 如果我叫“约翰·麦卡因·威廉”,我想要“麦卡因·威廉”。 我发现这样做的方法是使用以下解决方案:

RIGHT(person.name, length(person.name) - (length(split_part(person.name, ' ', 1)) + 1))
这样,我得到整个字符串的长度,从名字中减去长度,得到姓氏-1的长度(这样就不会有空格作为第一个字母),然后用“RIGHT Function”来“剪切”字符串。但它不是很可读,而且很难看。有更好、更优雅的方法吗?

那么:

array_to_string((regexp_split_to_array(name, '\s+'))[2:], ' ')
首先将名称转换为一个数组,每个单词有一个元素。然后它从第二个元素开始获取所有内容,并将数组转换回字符串。

关于:

array_to_string((regexp_split_to_array(name, '\s+'))[2:], ' ')

首先将名称转换为一个数组,每个单词有一个元素。然后它从第二个元素开始获取所有内容,并将数组转换回字符串。

使用
regexp\u matches

(regexp_匹配(名称,[^\s]+\s(+))[1]

正则表达式跳过一系列非空格字符,然后跳过空格,然后捕获剩下的任何字符,即原样的姓氏。表达式返回第一个捕获。如果
name
不包含姓氏,则表达式使用
regexp\u匹配产生
null

(regexp_匹配(名称,[^\s]+\s(+))[1]
正则表达式跳过一系列非空格字符,然后跳过空格,然后捕获剩下的任何字符,即原样的姓氏。表达式返回第一个捕获。如果
name
不包含姓氏,则表达式将生成
null