我有一列“名稱”,其中包含名字和姓氏。有些條目有 3 或 4 個名字。名稱示例如下:
"Max Mustermann"
"Max Christian Mustermann"
"Max Christian von Mustermann"
我需要將這些名稱分成兩個單獨的列“名字”和“姓氏”。我在堆疊溢位時發現的以下陳述句中的姓氏:
UPDATE table SET
lastname = regexp_replace(name, '^.* ', '')
對于名字,我需要回傳除此之外的所有內容嗎?目前我正在嘗試閱讀 regexp_replace 函式,但我覺得很難理解。我會很感激一些幫助。
uj5u.com熱心網友回復:
修改正則運算式以剪切最后一個空格之后的所有內容:
update my_table set
firstname = regexp_replace(name, '(^.*) .*', '\1'),
lastname = regexp_replace(name, '^.* ', '')
在db<>fiddle中測驗它。
uj5u.com熱心網友回復:
如何將SUBSTRING與正則運算式模式一起使用。
update your_table set first_name = substring(name, '^(\w )') , last_name = substring(name, '^\w \s (.*)$') where (first_name is null or last_name is null);
select name, first_name, last_name from your_table;
姓名 名 姓 馬克斯·穆斯特曼 最大限度 穆斯特曼 馬克斯·克里斯蒂安·穆斯特曼 最大限度 克里斯蒂安·穆斯特曼 馬克斯·克里斯蒂安·馮·穆斯特曼 最大限度 克里斯蒂安·馮·穆斯特曼
在這里測驗db<>fiddle
uj5u.com熱心網友回復:
使用左/右字串運算子,您可以執行以下操作:
select left(names, length(names)-pos) firstname, right(names,pos-1) Surname
from t,
lateral (values(strpos(reverse(names), ' ')))v(pos);
例如小提琴
uj5u.com熱心網友回復:
你在考慮split_part嗎?
UPDATE my_table SET
firstname = split_part(name, ' ', 1), lastname = split_part(name, ' ', 2)
在dbfiddle中測驗它
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/438775.html
標籤:sql PostgreSQL
