【问题标题】:How to change this raw statement to do the opposite如何更改此原始语句以执行相反的操作
【发布时间】:2021-09-17 23:29:00
【问题描述】:

我有这个原始的 SQL 语句,它接受一个全名,不管有多少个名字,然后把它变成 字符串中的最后一个单词作为姓氏 以及其他所有内容作为名字

DB::raw("SUBSTRING_INDEX(user_fullname, ' ', 1) AS firstname");
DB::raw("TRIM(SUBSTRING(user_fullname, 1, LENGTH(user_fullname) + 
    CHAR_LENGTH(SUBSTRING_INDEX(user_fullname, ' ', 2)))) AS lastname");

我希望它做相反的事情,将它作为名字作为字符串中的第一个单词,将其他所有单词作为姓氏;我尝试了代码,但我所做的一切似乎都破坏了它。

【问题讨论】:

  • 请提供样本数据和期望的结果。
  • 我有一个全名数据库,很多时候,名字由 3、4 或 5 个名字组成,我只想把它分成名字,名字只是数据中的第一个单词,其他都是姓氏。希望这能更好地解释它。
  • SUBSTRING(user_fullname, LENGTH(SUBSTRING_INDEX(user_fullname, ' ', 1))+2) AS lastname ...?
  • @CBroe 是的,这行得通,谢谢!

标签: php mysql sql laravel


【解决方案1】:

你不能为此使用 php 吗? 类似的东西:

$string = "first1 first2 first3 first4";
$pos = strrpos($string," ");
$firstname = substr($string,0,$pos);
$lastname = substr($string,$pos+1);

【讨论】:

  • 它在 php 中工作,但我想在查询生成器中进行。谢谢你
【解决方案2】:

这是对我有用的答案!

SUBSTRING(user_fullname, LENGTH(SUBSTRING_INDEX(user_fullname, ' ', 1))+2) AS lastname

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-16
    • 2013-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多