【问题标题】:Counting a column's first name计算列的名字
【发布时间】:2020-10-25 15:30:27
【问题描述】:

MYSQL - 如何计算每行的名字?我有一个客户表,其中有一列包含客户的全名。我需要知道每个客户名字中的字符数

------------------------
|  table client        |
------------------------
| id | name            |
------------------------
| 1  | Dylan Smith     |
| 2  | Bruce Johnson   |
| 3  | James Williams  |
| 4  | Thomas Johnson  |
| 5  | Jimmy Jones     |
| 6  | Matthew Miller  |
------------------------

我需要查询返回以下内容:

id | qtd_caracte
1  | 5
2  | 5
3  | 5
4  | 6
5  | 5
6  | 7

有谁知道这怎么可能?已经在google上搜索过,没有找到。

【问题讨论】:

    标签: mysql sql string count


    【解决方案1】:

    一种方法使用substring_index()

    select t.*, char_length(substring_index(name, ' ', 1))
    from t;
    

    请注意,即使name 没有空格,这也很方便,这就是为什么我建议使用它而不是position()/instr()/locate()

    【讨论】:

      【解决方案2】:

      使用字符串函数:

      select id, char_length(substring_index(name, ' ', 1)) nb_car
      from mytable
      

      【讨论】:

        【解决方案3】:

        你只需要函数LOCATE()来获取第一个空格的位置:

        select id, 
               locate(' ', name) - 1 qtd_caracte
        from client
        

        如果有名称不包含空格的情况:

        select id, 
               locate(' ', concat(name, ' ')) - 1 qtd_caracte
        from client
        

        请参阅demo
        结果:

        > id | qtd_caracte
        > -: | ----------:
        >  1 |           5
        >  2 |           5
        >  3 |           5
        >  4 |           6
        >  5 |           5
        >  6 |           7
        

        【讨论】:

          【解决方案4】:

          试试这个:

          SELECT id, char_length(SUBSTRING_INDEX(`name`, ' ', 1)) AS `qtd_caracte` from client ;
          

          享受...

          【讨论】:

          • (char_length())
          猜你喜欢
          • 1970-01-01
          • 2021-11-20
          • 2014-12-06
          • 2020-11-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-10-21
          • 1970-01-01
          相关资源
          最近更新 更多