Laravel使用Eloquent执行where查询时如何移除字段值中的点号?
问题解答
可以实现,你可以借助Eloquent的whereRaw()方法调用数据库内置的字符串替换函数,先移除price字段值中的所有点号,再转换为数值类型进行条件匹配。
不同数据库的写法示例如下:
- MySQL/MariaDB 场景
使用REPLACE函数替换点号后转无符号整数匹配:Products::whereRaw("CAST(REPLACE(price, '.', '') AS UNSIGNED) > ?", [30000])->get(); - PostgreSQL 场景
使用REPLACE结合整数类型转换:Products::whereRaw("CAST(REPLACE(price, '.', '') AS INTEGER) > ?", [30000])->get();
注意:以上写法默认你字段里的点号都只是千分位分隔符,不存在用作小数点的情况,否则替换后会出现数值错误。另外不推荐长期用这种方案,把数值类字段存储为带格式的字符串会导致查询无法走索引,性能很差,建议调整表结构把
price改为整数/十进制数值类型存储,前端展示的时候再格式化千分位即可。
内容的提问来源于stack exchange,提问作者SaschaK
相关产品推荐
相关产品推荐

