微信公众号制作开发 微信小程序定制开发 网站建设制作 手机app软件开发

您的位置:首页 > 技术观点 > 信息详情

thinkphp:将字符串转换为数字,在进行排序,解决对数字字符串排序问题

来源:山东鸿软信息科技有限公司  阅读量:410  时间:2024-06-18 17:24


问题

如果字段值有1,2,10需要进行排序,如果数据库中类型为vacher类型,那么排序结果为1,10,2,而不是1,2,10


问题代码

如果是字符串,比较大小会先按位进行比较,那么首位的2显然大于10的首位1,排在10的后面

$data['operation_code'] = Db::table('wip_operation_plan')

->where(['wip_entity_name' => $wip_entity_name])

->order(array('operation_seq_num ' => 'asc'))

->select();


解决代码

$data['operation_code'] = Db::table('wip_operation_plan')

->where(['wip_entity_name' => $wip_entity_name])

->orderRaw('CAST(operation_seq_num AS UNSIGNED) ASC')

->select();



解析

使用 orderRaw 方法执行原生的 SQL 排序功能,将字符串类型的字段转换为数值类型后再排序。

使用 MySQL 中的 CAST 函数将字符串转换为数值,并指定转换的值的类型(比如 UNSIGNED 表示无符号整数),然后在 orderRaw 方法中使用转换后的字段进行排序


->orderRaw('CAST(operation_seq_num AS UNSIGNED) ASC')


上述就表述将字段operation_seq_num转换为数值类型,并进行正序排序



结果

1,2,10


本文标签:

成为您更加专业的技术合伙人

网站建设 | APP开发 | 产品服务 | 技术观点 | 关于我们      客服电子邮箱:1828087588@qq.com  客服QQ:1828087588、1421667633  电话:151-6502-2080

Copyright © 2016-2024 山东鸿软信息科技有限公司 版权所有 https://www.greatsoft.cn 鲁ICP备16026454号