You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel Eloquent查询如何截取字段中小数点前的字符内容

解决方案

可以直接在查询语句中实现该需求,根据你使用的数据库类型,对应实现方式如下:

1. 数据库层面处理(性能最优)

MySQL环境

使用MySQL内置的SUBSTRING_INDEX函数实现按小数点截取前缀,示例代码如下:

$po_number= DB::table('supplierorders')
    ->select('supplierorders.*', DB::raw("SUBSTRING_INDEX(po_number, '.', 1) as po_number_prefix"))
    ->orderBy('po_number','asc')
    ->get();
  • 字段说明:SUBSTRING_INDEX(字段名, 分隔符, 截取位置),第三个参数传1代表取第一个分隔符之前的所有内容
  • 取值方式:查询完成后通过$item->po_number_prefix即可获取PO995这类无后缀的结果
  • 如果需要直接覆盖原有po_number字段返回值,可将select部分修改为:
    ->select(DB::raw("SUBSTRING_INDEX(po_number, '.', 1) as po_number, supplierorders.*"))
    

其他数据库适配

  • PostgreSQL:替换函数为SPLIT_PART(po_number, '.', 1)
  • SQL Server:替换函数为LEFT(po_number, CHARINDEX('.', po_number) - 1)

2. 集合层面处理(全数据库兼容)

如果需要兼容多种数据库,不想编写数据库专属SQL,可以在获取查询结果后通过Laravel集合的map方法处理:

$po_number= DB::table('supplierorders')
    ->select('supplierorders.*')
    ->orderBy('po_number','asc')
    ->get()
    ->map(function ($item) {
        // 按小数点分割取第一段
        $item->po_number_prefix = explode('.', $item->po_number)[0];
        return $item;
    });

这种方式无需调整SQL语句,缺点是数据量极大时处理效率略低于数据库层面直接计算。

内容的提问来源于stack exchange,提问作者Inno

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 23:27:04