【问题标题】:How to migrate name column to first and last name in PostgreSQL如何将名称列迁移到 PostgreSQL 中的名字和姓氏
【发布时间】:2022-07-06 16:01:48
【问题描述】:

我想编写一个 SQL 迁移来将“name”列拆分为“users”表中的“first_name”和“last_name”列,我已经创建了 2 列。

我正在寻找一个看起来像的命令

UPDATE users
SET (first_name, last_name)
VALUES ({expression for first name}, {expression for last name});

我接受两个部分之间的边界是第一个空白字符的假设。 (即对于 John Doe Jr,姓氏应该是 'Doe Jr')

我尝试使用regexp_match(name, [^\s]*) 作为名字,但对于name="John Doe" 它返回first_name="{John}",我该如何解决这个问题,或者有比使用regexp_match 更好的方法吗?

【问题讨论】:

  • 另外,注意像 Doe, John - John Doe Jr - Mr John E Doe - Doe, Mr John E Esq 这样的事情。 - 等等。

标签: sql regex postgresql database-migration


【解决方案1】:

我设法使用(regexp_match(name, '[^\s]*'))[1] 做到了这一点,但我不确定它是否是最惯用的 SQL

【讨论】:

    【解决方案2】:
    UPDATE users SET first_name = (regexp_split_to_array(name, E'\s+'))[1], last_name = (regexp_split_to_array(name, E'\s+'))[2]
    

    【讨论】:

    • 对于“John Doe Jr”,这不会导致first_name='John'last_name='Doe',我怎么会有last_name='Doe Jr'?这对于拥有 2 个姓氏的西班牙裔用户来说尤其重要
    猜你喜欢
    • 1970-01-01
    • 2016-02-22
    • 2019-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-07
    相关资源
    最近更新 更多