【问题标题】:How to spilt Fullname to First name, middlename and lastname in Query Builder?如何在查询生成器中将全名拆分为名字、中间名和姓氏?
【发布时间】:2019-08-14 22:13:01
【问题描述】:

我有一张表,有一个“姓名”字段,但有时名字太长,我怎么只取名字,中间名和姓氏(只有3个字)?

$student = DB::table('student')
    ->select('student.name')//Split to Firstname, Middlename&Lastname
    ->get();

【问题讨论】:

  • 请提供样本数据,包括代表所有边缘情况的数据(例如,某些学生姓名是否只有第一个和最后一个,或者甚至可能只有最后一个)。没有看到您的数据,我们无法给您答案。
  • 或许,你可以阅读一下mutators,这是做你想做的事的好方法。

标签: sql laravel query-builder


【解决方案1】:

我不认为 eloquent 可以做到这一点。你需要使用php内置函数

$fullname = explode(" ", $student);
$firstname = array_shift($split);
$lastname  = implode(" ", $split);

【讨论】:

    【解决方案2】:

    我认为最简单的方法。希望能帮到你

    对我来说,将一个单词(全名)分成三个是一个坏主意,因为如果他的名字中有两个单词,那么问题就会存在,因为你只希望三个单词(first,middle,&lastname )。

    但如果你真的想追求,下面是代码:

    $student = DB::table('student')
        ->select(
            'student.name',
            DB::raw("SUBSTRING_INDEX(student.name, ' ', 1) AS Firstname"),
            DB::raw("SUBSTRING_INDEX(SUBSTRING_INDEX(student.name, ' ', 2),' ',-1) AS Middlename"),
            DB::raw("SUBSTRING_INDEX(SUBSTRING_INDEX(student.name, ' ', 3),' ',-1) AS Lastname")
        )
        ->get();
    

    我假设您使用空格(' ')连接三个单词(名字、中间名和姓氏)

    注意示例输出:
    1. John Ghost Pon
    Firstname = "John", Middlename = "Ghost", Lastname = "Pon"
    2. 嫁给安妮·史密斯英格拉姆
    = "Marry", 中间名 = "Anne", = "Smith"


    SUBSTRING_INDEX 函数返回一个字符串在出现指定数量的分隔符之前的子字符串:More examples
    如果仍然不起作用,请告诉我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-26
      • 1970-01-01
      相关资源
      最近更新 更多