mysql实现将字符串字段转为数字排序或比大小
目录
- 将字符串字段转为数字排序或比大小
- 排序
- 比大小
- sql语句字符串如何比较大小
- 解决方法
将字符串字段转为数字排序或比大小
mysql里面有个坑就是,有时按照某个字段的大小排序(或是比大小)发现排序有点错乱。后来才发现,是我们想当然地把对字符串字段当成数字并按照其大小排序(或是比大小),结果肯定不会是你想要的结果。
这时候需要把字符串转成数字再排序。
最简单的办法就是在字段后面加上+0
如把'123'转成数字123(以下例子全为亲测):
排序
例:
- 方法一:
ORDER BY '123'+0;(首推)
- 方法二:
ORDER BY CAST('123' AS SIGNED);
- 方法三:
ORDER BY CONVERT('123',SIGNED);
比大小
例:
SELECT '123'+0; -- 结果为123 SELECT '123'+0>127; -- 结果为0 SELECT '123'+0>12; -- 结果为1 SELECT CAST('123' AS SIGNED); -- 结果为123 SELECT CONVERT('123',SIGNED)>127; -- 结果为0 SELECT CONVERT('123',SIGNED)>12; -- 结果为1 SELECT CAST('123' AS SIGNED); -- 结果为123 SELECT CAST('123' AS SIGNED)>127; -- 结果为0 SELECT CAST('123' AS SIGNED)>12; -- 结果为1
综合例子:
SELECT '123'+0>12 ORDER BY CONVERT('123',SIGNED); -- 结果为1
sql语句字符串如何比较大小
需求如下,字段A是varchar类型,现在要将字段A与一个数字比较。上网搜索了一下,99%给出的方法都是cast(字段A as int),或者convent(int,字段A)。
不知道为啥,这两种方法我都试了,语法都不通过,更不用说运行了。
解决方法
写法如下:
select * from XX where 字段A+0 < 数字 + 0
是的,你没看错,就是“+0”这样一个简单的操作。
运行结果贴出来,自己看吧
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。
相关推荐
-
MySQL 字符串转换为数字的方法小结
方法一:直接 加 0select '123' + 0 方法二:函数 convert语法:convert (value, type);type可以为: decimal 浮点数 signed 整数 unsigned 无符号整数 select convert('123',signed) 方法三:函数 cast语法:cast (value as type); type可以为: decimal 浮点数 signed 整数 unsigned 无符号整数 select cast('123' as signed
-
Mysql 数字类型转换函数
1.将Int 转为varchar经常用 concat函数,比如concat(8,'0') 得到字符串 '80' 2.将varchar 转为Int 用 cast(a as signed) a为varchar类型的字符串 总结:类型转换和SQL Server一样,就是类型参数有点点不同 : CAST(xxx AS 类型) , CONVERT(xxx,类型) 可用的类型 二进制,同带binary前缀的效果 : BINARY 字符型,可带参数 : CHAR() 日期 : DATE 时间: TIME 日期
-
MySQL数据库中varchar类型的数字比较大小的方法
创建测试表 -- ---------------------------- -- Table structure for check_test -- ---------------------------- DROP TABLE IF EXISTS `check_test`; CREATE TABLE `check_test` ( `id` int(11) NOT NULL AUTO_INCREMENT, `current_price` varchar(10) NOT NULL, `price`
-
MySQL关于字符串中数字排序的问题分析
本文实例讲述了MySQL关于字符串中数字排序的问题.分享给大家供大家参考,具体如下: MySQL字符串相信大家都不陌生,在MySQL字符串排序时经常会遇到一些问题,比如下面要介绍的这个 今天解决了一个关于MySQL字符串排序的很奇怪的问题,在数据里面定义的是varchar类型,实际存放的是Int类型的数据,按一下查询语句进行排序: 将字段*1或者+0可以将MySQL字符串字段按数值排序 如: select * from table where 1 order by id*1 desc; 或者 s
-
mysql实现将字符串字段转为数字排序或比大小
目录 将字符串字段转为数字排序或比大小 排序 比大小 sql语句字符串如何比较大小 解决方法 将字符串字段转为数字排序或比大小 mysql里面有个坑就是,有时按照某个字段的大小排序(或是比大小)发现排序有点错乱.后来才发现,是我们想当然地把对字符串字段当成数字并按照其大小排序(或是比大小),结果肯定不会是你想要的结果. 这时候需要把字符串转成数字再排序. 最简单的办法就是在字段后面加上+0 如把'123'转成数字123(以下例子全为亲测): 排序 例: 方法一: ORDER BY '123'+0
-
MySQL怎么给字符串字段加索引
假设,你现在维护一个支持邮箱登录的系统,用户表是这么定义的: create table SUser( ID bigint unsigned primary key, email varchar(64), ... )engine=innodb; 由于要使用邮箱登录,所以业务代码中一定会出现类似于这样的语句: select f1, f2 from SUser where email='xxx'; 如果 email 这个字段上没有索引,那么这个语句就只能做全表扫描. 1)那我可以在邮箱地址这个
-
Mysql指定某个字符串字段前面几位排序查询方式
目录 指定某个字符串字段前面几位排序查询 数据样例 第一步(想办法先截取到 ORDER关键字前面的 值) 第二步,直接根据NO排序即可? (有坑) 第三步转换排序 总结 指定某个字符串字段前面几位排序查询 数据样例 想要结果: 每个test_value 里面都包含 ORDER 关键字, 想根据这个关键字 前面的数字进行排序. 第一步(想办法先截取到 ORDER关键字前面的 值) 使用SUBSTRING_INDEX 函数 sql : SELECT ID,SUBSTRING_INDEX(test_v
-
mysql中取字符串中的数字的语句
复制代码 代码如下: one: declare @s varchar(20) declare @i varchar(20) set @i='' set @s='新会员必须购买350元产品' while PATINDEX ('%[0-9]%', @s)>0 begin set @i=@i+substring(@s,PATINDEX ('%[0-9]%', @s),1) set @s=stuff(@s,1,PATINDEX ('%[0-9]%', @s),'') end select @i -- 3
-
Mysql中实现提取字符串中的数字的自定义函数分享
因需要在mysql的数据表中某一字符串中的字段提取出数字,在网上找了一通,终于找到了一个可用的mysql函数,可以有效的从字符串中提取出数字. 该mysql提取出字符串中的数字函数如下: 复制代码 代码如下: CREATE FUNCTION GetNum (Varstring varchar(50)) RETURNS varchar(30) BEGIN DECLARE v_length INT DEFAULT 0; DECLARE v_Tmp varchar(50) default ''; se
-
MySQL提取Json内部字段转储为数字
目录 背景 问题分析 1.属性值是 Json 格式的,需要使用 Json 操作函数处理 2.字段内容不规范,乱七八糟 3.又要抽取内容.又要格式化,记录还有 900w+,太慢了 最后执行结果比较 数据导入比较 总结 这只是一次简单数据迁移的统计,数据量不大,麻烦的是一些中间步骤处理和思量. 没有 SQL 优化.索引优化的内容,大家轻喷. 背景 用户眼科属性表记录数大概 986w,目的是把大概 29w 记录的属性值(json 格式)的其中八个字段解析为数字,转储为统计表的记录,用于图表分析. 以下
-
Mysql字符串字段判断是否包含某个字符串的2种方法
假设有个表: 复制代码 代码如下: CREATE TABLE users(id int(6) NOT NULL AUTO_INCREMENT,PRIMARY KEY (id),user_name VARCHAR(20) NOT NULL,emails VARCHAR(50) NOT NULL); 初始化表,并添加些记录. 复制代码 代码如下: truncate table users INSERT INTO users(user_name, emails) VALUES('小张','a@emai
-
python用reduce和map把字符串转为数字的方法
python中reduce和map简介 map(func,seq1[,seq2...]) :将函数func作用于给定序列的每个元素,并用一个列表来提供返回值:如果func为None,func表现为身份函数,返回一个含有每个序列中元素集合的n个元组的列表. reduce(func,seq[,init]) :func为二元函数,将func作用于seq序列的元素,每次携带一对(先前的结果以及下一个序列的元素),连续的将现有的结果和下一个值作用在获得的随后的结果上,最后减少我们的序列为一个单一的返回值:
-
MySQL 按指定字段自定义列表排序的实现
问题描述 大家都知道, MySQL 中按某字段升序排列的 SQL 为 (以 id 为例,下同): SELECT * FROM `MyTable` WHERE `id` IN (1, 7, 3, 5) ORDER BY `id` ASC 降序排列的 SQL 为: SELECT * FROM `MyTable` WHERE `id` IN (1, 7, 3, 5) ORDER BY `id` DESC 有时以上排序并不能满足我们的需求. 例如, 我们想要按 id 以 5, 3, 7, 1 的顺序排列
随机推荐
- “SQL2000数据库”运行在普通用户下所需的权限
- Java入门基础之Java的基本语法与Java所支持的数据类型
- asp.net 实现自定义Hashtable (.net)
- php 微信公众平台开发模式实现多客服的实例代码
- python base64 decode incorrect padding错误解决方法
- android基于dialog实现等待加载框示例
- PHP中的float类型使用说明
- 详解nodejs 文本操作模块-fs模块(四)
- js加密解密字符串可自定义密码因子
- 基于jquery的文章中所有图片width大小批量设置方法
- java中final与finally的使用介绍
- PHP简单实现合并2个数字键数组值的方法
- webhoster4free.de为您提供免费1G空间
- python使用socket创建tcp服务器和客户端
- Linux中selinux基础配置教程详解
- 在Vue组件中获取全局的点击事件方法
- 微信、QQ、微博、Safari中使用js唤起App
- mysql删除关联表的实操方法
- springboot+gradle 构建多模块项目的步骤
- Java实现多个数组间的排列组合