gpt4 book ai didi

java - 如何在 PostgreSQL 中出现第一个空格时拆分字符串

转载 作者:行者123 更新时间:2023-11-29 12:51:20 29 4
gpt4 key购买 nike

我在 PostgreSQL 数据库中有列,我想进行 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 个元素创建,并且在文森特梵高的情况下,last_name 仅填充第二个元素。

| 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+ 个空白字符,然后捕获到第 1 组任意数量的 0+ 个字符。括号中的部分,即捕获组模式,是 substring 将返回的内容。

But if the pattern contains any parentheses, the portion of the text that matched the first parenthesized subexpression (the one whose left parenthesis comes first) is returned.

关于java - 如何在 PostgreSQL 中出现第一个空格时拆分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53193883/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com