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

如何在Laravel查询中按特定字符截取字符串?

解决Laravel查询中按特殊字符截断字符串的问题

要实现对NUMBER字段按-、:、;截断,只保留特殊字符之前的内容,可以借助MySQL的正则表达式函数处理,以下是具体方案:

修改后的查询代码

$users = User::select(
    "USERID as id",
    DB::raw("CONCAT(NAME, ' - ', REGEXP_SUBSTR(NUMBER, '^[^-:;]+'), ' - ', ROLE) as text")
)
->whereNotNull('name')
->orderBy('name');

代码说明

  • REGEXP_SUBSTR(NUMBER, '^[^-:;]+'):从NUMBER字段开头匹配所有非-、:、;的字符,直到遇到第一个特殊字符为止;如果字段里没有这些特殊字符,直接返回原字段内容。
  • 简化了原嵌套CONCAT的写法,合并为单个CONCAT调用,更易读。

兼容旧版MySQL(无REGEXP_SUBSTR支持)

如果你的MySQL版本低于8.0,不支持REGEXP_SUBSTR,可以用嵌套SUBSTRING_INDEX的方式处理:

$users = User::select(
    "USERID as id",
    DB::raw("CONCAT(NAME, ' - ', SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(NUMBER, ':', 1), '-', 1), ';', 1), ' - ', ROLE) as text")
)
->whereNotNull('name')
->orderBy('name');

该方法会依次按:、-、;截取第一个出现位置之前的内容,最终得到最靠前的特殊字符截断后的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 21:05:51