如何在查询生成器中将全名溢出到名字,中间名和姓氏上?

时间:2019-03-24 14:22:55

标签: sql laravel query-builder

我有一个表,并且有一个“名称”字段,但是有时某些名称太长,我该如何取名字,中间名和姓氏(仅3个字)?

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

2 个答案:

答案 0 :(得分:0)

我不认为雄辩者可以做到这一点。您需要使用php内置函数

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

答案 1 :(得分:0)

我认为的最简单的方法。希望能为您提供帮助

对我来说,将一个单词(全名)分成三个单词是一个坏主意,因为如果他的名字中有两个单词怎么办,那么问题就存在了,因为您只希望三个单词(名字,中间和姓氏) )。

但是,如果您真的想追求,请参考以下代码:

$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
名字 =“约翰”,中间名 =“鬼”,姓氏 =“ Pon”
2.嫁给安妮·史密斯·英格拉姆
名字 =“结婚”,中间名 =“安妮”,姓氏 =“史密斯”


SUBSTRING_INDEX 函数在指定数量的定界符出现之前返回字符串的子字符串:More examples
请告诉我是否仍然无法使用。