[英]How to split up string on first whitespace occurance in PostgreSQL
我在PostgreSQL DB中有專欄,我想進行一次Flyway遷移,以便根據第一次出現的空白將全名分為first_name和last_name。 在一些胭脂行中,只有一個單詞或幾個單詞。 例如:
| fullname |
| ---------------- |
| Admin |
| Jon Doe |
| Vincent Van Gogh |
我想將列全名遷移到:
| first_name | last_name |
| -----------|---------- |
| Admin | |
| John | Doe |
| Vincent | Van Gogh |
錯誤的解決方案:我嘗試了幾種正則表達式,以便找到正確的正則表達式在第一次出現空白時將字符串拆分。 不幸的是,一切都不成功。 有人可以幫我找到合適的正則表達式,以便在第一次出現空白時將字符串拆分嗎? 或者也許有比regexp_split_to_array()更好的方法來使用其他PostgreSQL方法?
UPDATE users
SET first_name = (regexp_split_to_array(users.full_name, '\s+'))[1],
last_name = (regexp_split_to_array(users.full_name, '\s+'))[2],
如果使用'\\ s +'正則表達式,則使用3個元素創建數組,如果使用Vincent Van Gogh,則僅將lastndname填充到第二個元素。
| first_name | last_name |
| -----------|---------- |
| Admin | |
| John | Doe |
| Vincent | Van | <- Missing Gogh surname
您可以使用substring
:
UPDATE users
SET first_name = substring(users.full_name, '^\S+'),
last_name = substring(users.full_name, '^\S+\s+(.*)'),
^\\S+
模式在字符串的開頭匹配1個或多個非空格字符。
^\\S+\\s+(.*)
模式與一個字符串匹配,該字符串開頭以1+個非空白字符開頭,然后具有1+個空白字符,然后將任意數量的0+字符捕獲到組1中。 括號部分,即捕獲組模式,是substring
將返回的內容。
但是,如果模式包含任何括號,則將返回與第一個帶括號的子表達式(左括號在前的那個)匹配的文本部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.