如何在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
相关产品推荐
相关产品推荐

