SQL字符型字段按数字型字段排序实现方法_Mysql

这是很久之前的就遇到的问题了,去年写了个WP插件:WordPress投票插件Ludou Simple Vote,由于有些使用者需要一个投票排行榜,所以需要用一条SQL来读取按得分排序的文章列表。

     Ludou Simple Vote的投票得分结果是以自定义栏目的方式存储在WordPress的postmeta中,分值存放在meta_value字段,而meta_value字段类型是longtext,如果直接使用下面的SQL查询语句来排序:

复制代码 代码如下:

ORDER BY `meta_value`

     那么按得分排序得到的结果可能是:
1
10
11
123
1234
2
25
253
3

     由于是按字母顺序排列,所以123排在了2的前面,显然不符合我们的要求,那么怎样才能按照我们预想的数字顺序排序呢?下面介绍两种方法。

一、采用MySQL的cast函数,转换字段格式

     这里我们将meta_value字段转换成数值类型的字段DECIMAL,然后再进行排序:

复制代码 代码如下:

ORDER BY CAST(`meta_value` AS DECIMAL)

     需要注意的是,你所要排序的meta_value字段的值必须都是可转换成数字,否则将会出错。

二、使用MySQL绝对值函数ABS

     使用MySQL绝对值函数ABS,它告诉MySQL使用绝对值来处理处理这个字段:

复制代码 代码如下:

ORDER BY ABS(`meta_value`)

时间: 2024-11-01 02:46:22

SQL字符型字段按数字型字段排序实现方法_Mysql的相关文章

JavaScript对表格或元素按文本,数字或日期排序的方法

  本文实例讲述了JavaScript对表格或元素按文本,数字或日期排序的方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 6

SQL字符型字段按数字型字段排序语句

Ludou Simple Vote的投票得分结果是以自定义栏目的方式存储在WordPress的postmeta中,分值存放在meta_value字段,而meta_value字段类型是longtext,如果直接使用下面的SQL查询语句来排序:  代码如下 复制代码 ORDER BY `meta_value` 那么按得分排序得到的结果可能是: 1 10 11 123 1234 2 25 253 3 由于是按字母顺序排列,所以123排在了2的前面,显然不符合我们的要求,那么怎样才能按照我们预想的数字顺

SQL Server 2005 安装遇到的错误提示和解决方法_Mysql

安装SQL Server 2005弄了好久,终于可以了...期间问题重重,想拿出来和大家一同分享的. 第一种错误显示: 无法在com+目录中安装和配置程序集 错误:-2146233087 无法在com+目录中安装和配置程序集c:\program files\Microsoft SQL Server\90\DTS\tasks\microsoft.sqlserver.MSMQTASK.DLL.  错误:-2146233087 sql server 安装时"无法在COM+目录中安装和配置程序"

浅谈MySQL中优化sql语句查询常用的30种方法_Mysql

1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 3.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id from

字段为char型,如何再sql where 里判断他为空, isnot null 好像不行

问题描述 字段为char型,如何再sqlwhere里判断他为空,isnotnull好像不行 解决方案 解决方案二:为空是isnull吧解决方案三:isnull也不行解决方案四:datalength(字段名称)>0解决方案五:字段=''orlen(字段)=0解决方案六:SELECT*FROMtbWEHREfieldISNOTNULL 解决方案七:where敲错.解决方案八:len(字段)解决方案九:我自己是这样做的replace(字段,'')isnotnull解决方案十:上面的写法是画蛇添足.如果

select-derby数据库where查询关于字符型和数字型单引号问题

问题描述 derby数据库where查询关于字符型和数字型单引号问题 select * from TB_treeinfo where pid = '1' 求高人解答: pid如果是字符型加单引号可以,但是数字型就不能加引号,但是在程序中,pid是不固定的,有可能是字符型也可能是数字型,这个情况怎么处理啊 解决方案 Sql server 数据库中,纯SQL语句查询.执行 单引号问题.RCP Hibernate Derby数据库连接问题 No suitable driver found forRub

请问在C#中如何将字符型的转化为数字型的?

问题描述 我打算用一个TEXTBOX控件穿一个数字型参数给数据库,但提示说Textbox1.Text出错,应该是数据类型不一样,请问在C#中如何将字符型的转化为数字型的? 解决方案 解决方案二:intcount=Convert.ToInt23(textbox1.Text);解决方案三:decimaldvalue=0.0m;if(!decimal.TryParse(this.textBox.Text,outdvalue)){return;//不能转换为数字类型.}Console.WriteLine

SQL Server 2008 R2——使用数字辅助表(master..spt_values)实现用计数字段对记录进行重复显示

原文:SQL Server 2008 R2--使用数字辅助表(master..spt_values)实现用计数字段对记录进行重复显示 =================================版权声明================================= 版权声明:原创文章 谢绝转载  请通过右侧公告中的"联系邮箱(wlsandwho@foxmail.com)"联系我 勿用于学术性引用. 勿用于商业出版.商业印刷.商业引用以及其他商业用途.       本文不定期修

oracle中sql 截取字段中的数字按条件排序

问题描述 oracle中sql 截取字段中的数字按条件排序 请教各位,这个sql怎么拼,我的字段(code)规则是:备案事项[2014]1,前面中文是固定的,然后是括起来的年份(可能是2013,2014,2015等等),后面是流水号(从1,2,3,...,10,..递增的),我想查出所有2013年的数据,要求按后面的流程号数字倒叙排列.恳求大神帮忙,谢谢! 解决方案 假设字段名是code SELECT code, substr(code,INSTR(code,'[', 0, 1)+1,INSTR