【问题标题】:split string with space in MYSQL在MYSQL中用空格分割字符串
【发布时间】:2020-12-17 05:25:25
【问题描述】:

我有类似的数据

Name
-----------------
Ram Mohan
Ram Lal Mohan
Ram K Lal Mohan
...

我正在使用:

select SUBSTRING_INDEX(Name,' ',1) from contact

获取名字

select SUBSTRING_INDEX(Name,' ',-1) from contact

获取姓氏

我正在获取类似的数据

first name     last name
------------------------
Ram              Mohan
Ram              Mohan
Ram              Mohan

但我应该得到的数据是这样的

    first name     last name
------------------------
Ram              Mohan
Ram Lal          Mohan
Ram K Lal        Mohan

只有空格后的最后一个单词才能出现在姓氏中 rest 应该以名字命名

有人可以帮助我找到实现这一目标的方法吗?

【问题讨论】:

    标签: mysql sql split mysql-workbench


    【解决方案1】:

    假设您使用的是 MySQL 8+,您可以在此处使用正则表达式替换:

    SELECT
        REGEXP_REPLACE(Name, '\\s+\\S+$', '') AS first,
        SUBSTRING_INDEX(Name,' ', -1) AS last
    FROM contact;
    

    Demo

    对于早期版本的 MySQL,并假设姓氏永远不会出现在名称中的任何其他位置,您可以使用 SUBSTRING_INDEXREPLACE

    SELECT
        REPLACE(Name, CONCAT(' ', SUBSTRING_INDEX(Name,' ', -1)), '') AS first,
        SUBSTRING_INDEX(Name,' ', -1) AS last
    FROM contact;
    

    Demo

    第二种方法基本上只是删除了您已经使用SUBSTRING_INDEX 正确找到的姓氏(加上前导空格)。剩下的应该是你想要的第一个、中间等等,组件。

    【讨论】:

      【解决方案2】:

      由于您可以获得姓氏,因此您可以删除该数量的字符以获得名字。

      select
          trim(left(Name,char_length(Name)-char_length(substring_index(Name,' ',-1)))) first_name,
          substring_index(Name,' ',-1) last_name
      from contact
      

      请注意,姓氏中可以包含空格(例如“Walter de la Mare”)。

      fiddle

      【讨论】:

        猜你喜欢
        • 2012-09-22
        • 2014-12-13
        • 2013-08-02
        • 2023-04-02
        • 2020-05-16
        • 2013-10-11
        • 1970-01-01
        • 2010-09-24
        • 1970-01-01
        相关资源
        最近更新 更多