MySQL实用sql语句之根据版本号作为查询条件来过滤数据
需求背景:
项目开发中,要求给特定版本号的用户推送消息,需要根据版本号作为查询条件来过滤用户数据。例如,项目中有一张用户表,表名:t_user,需要给版本号 <= 1.2.9的用户推送消息。
数据表结构:
t_user表结构:
CREATE TABLE `t_user` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户ID', `device_id` varchar(50) NOT NULL COMMENT '客户端设备号', `version` varchar(20) NOT NULL COMMENT '客户端版本号', `created_at` datetime NOT NULL COMMENT '用户创建时间', `updated_at` datetime NOT NULL COMMENT '用户数据最近一次更新时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COMMENT='用户数据表';
t_user表数据:
查询版本号 <= 1.2.9的用户数据:
错误的查询:
-- 错误的查询:用户ID = 3(版本号=1.2.12)的数据也被查询出来了 select * from `demo`.`t_user` where version <= "1.2.9";
正确查询:
-- 正确查询 select * from `demo`.`t_user` where cast( concat( substring_index(substring_index(version, '.', 1), '.', -1), substring_index(substring_index(version, '.', 2), '.', -1), substring_index(substring_index(version, '.', 3), '.', -1) ) as signed ) <= 129;