精华内容
下载资源
问答
  • sql按照指定顺序排序
    2020-10-16 10:34:11

    1.用标准的case when 方式。

    2.利用DECODE()解密方法。

    3.利用charindex()查找字符串方法。

    更多相关内容
  • SQL查询结果按照指定内容排序

    千次阅读 2022-04-30 10:03:17
    SQL查询结果按照指定内容排序

    一般来说,我们在开发SQL脚本的时候,遇到需要排序的内容,用order by需要排序的字段就可以满足我们排序的需求,asc为升序、desc为降序,不指定关键字默认为升序。但是有时候,我们需要的排序不仅仅是升序和降序,asc与desc并不能满足我们的排序需求,所以我们需要用到按照指定的内容进行排序的操作,下面我们就从MySQL与Oracle两个数据库来看一下具体的操作:

    一、MySQL

    1,函数FIELD

    格式:order by FIELD(需要排序的字段,字段内容1,字段内容2,字段内容3)
    示例:order by FIELD(office_name,'云南办','江苏办','山西办')
    释义:数据结果按照office_name排序,指定顺序为'云南办','江苏办','山西办'
    

    特殊情况说明:

    (1)指定的排序内容为字段的所有内容

    意思是office_name里面只包含’云南办’,‘江苏办’,‘山西办’,可以直接用下面语句进行排序

    order by FIELD(office_name,'云南办','江苏办','山西办')
    释义:查询结果排序内容为四川省、甘肃省、陕西省
    示例:
    SELECT DISTINCT office_code,office_name 
    FROM EC_ZB.ecorder_completion_rate_day
    WHERE 1=1
    AND office_name IN ('云南办','江苏办','山西办')
    ORDER BY FIELD(office_name,'云南办','江苏办','山西办') 
    

    结果展示:
    SQL按指定内容排序

    (2)指定的排序内容为字段的部分内容

    意思是office_name里面不仅包含’云南办’,‘江苏办’,‘山西办’,还有别的内容,但是你只想把这三个省的内容放在最前面,那么你需要用下面的语句进行排序

    order by FIELD(office_name,'山西办','江苏办','云南办') desc
    释义:这样的排序内容为云南办、江苏办、山西办、其他省份数据
    SELECT DISTINCT office_code,office_name 
    FROM EC_ZB.ecorder_completion_rate_day
    WHERE 1=1
    -- AND office_name IN ('云南办','江苏办','山西办')
    ORDER BY FIELD(office_name,'山西办','江苏办','云南办')  desc
    

    结果展示:
    指定的排序内容为字段的部分内容1
    如果使用order by FIELD(office_name,‘云南办’,‘江苏办’,‘山西办’) ,
    排序内容为 其他省份,‘云南办’,‘江苏办’,‘山西办’

    SELECT DISTINCT office_code,office_name 
    FROM EC_ZB.ecorder_completion_rate_day
    WHERE 1=1
    -- AND office_name IN ('云南办','江苏办','山西办')
    ORDER BY FIELD(office_name,'云南办','江苏办','山西办') 
    

    结果展示:
    指定的排序内容为字段的部分内容2

    2,函数locate

    locate的用法和field很相似,只是locate是判断字符串的内容是否包含在指定的字符串里。下面是详细讲解

    格式:locate(subStr,string) 
    释义:判断字符串(string)中是否包含另一个字符串(subStr),函数返回的是subStr在string中出现的位置
    示例:ORDER BY LOCATE(office_name,'云南办,江苏办,山西办') 
    
    SELECT DISTINCT office_code,office_name 
    FROM EC_ZB.ecorder_completion_rate_day
    WHERE 1=1
    AND office_name IN ('云南办','江苏办','山西办')
    ORDER BY LOCATE(office_name,'云南办,江苏办,山西办') 
    

    结果展示
    函数locate

    二、Oracle

    在Oracle中,使用decode函数,就可以实现按照指定内容排序的功能,下面是详细的讲解。

    格式:order by decode(条件,1,返回值1,2,返回值2,...值n,返回值n,缺省值)
    示例:ORDER BY DECODE(agency_name,'云南独资办事处','1','江苏独资办事处','2','四川直营办事处','3')
    释义:查询结果按照agency_name字段的云南独资办事处、江苏独资办事处、四川直营办事处排序
    

    1,指定的内容为字段的全部内容

    SQL例子:

    SELECT DISTINCT  AGENCY_CODE ,agency_name 
    FROM ecorder.ec_order
    WHERE 1=1
    AND AGENCY_CODE IS NOT NULL
    AND agency_name IN ('云南独资办事处','江苏独资办事处','四川直营办事处')
    ORDER BY DECODE(agency_name,'云南独资办事处','1','江苏独资办事处','2','四川直营办事处','3')
    

    查询结果:
    decode指定内容排序

    2,指定内容为字段的部分内容

    Oracle的decode函数,和MySQL的field()函数还是有差别的,即便是你在排序的时候,指定的内容为字段的部分内容,也不会影响排序结果,首先按照指定内容排序,其他的放在指定内容的后面。
    示例SQL:

    SELECT DISTINCT  AGENCY_CODE ,agency_name 
    FROM order.order
    WHERE 1=1
    AND AGENCY_CODE IS NOT NULL
    ORDER BY DECODE(agency_name,'云南独资办事处','1','江苏独资办事处','2','四川直营办事处','3')
    

    查询结果:
    decode指定部分字段内容排序
    到这里,指定字段内容的排序就结束了,大家可以按照自己的需求以及目标数据库进行对应选择使用,希望可以给你带来思路和开发便利。

    我是晓之以理的喵~,欢迎交流。

    展开全文
  • sql按照指定规则排序

    千次阅读 2019-12-15 20:59:02
    一般的sql排序用order by 某个字段或几个字段升降序 SELECT * from all_enquiry order by state ASC , create_time DESC; 如果想让state等于2的拍在最上面怎么办呢? SELECT * FROM all_enquiry a ORDER BY CASE ...

    一般的sql排序用order by 某个字段或几个字段升降序

    SELECT * from all_enquiry order by  state ASC , create_time DESC;
    

    在这里插入图片描述
    如果想让state等于2的拍在最上面怎么办呢?

    SELECT * FROM all_enquiry a ORDER BY CASE when state=2 then 1 else 2 end ,create_time desc; 
    

    在这里插入图片描述
    3,同理,如果想让state为2排在最上面,等于1排在第二,等于4排在第三,等于3排在第四,可以这样写;

    SELECT * from all_enquiry order by 
    case when state=2  then 1 when state=1 then 2 when state=4 then 3 when state=3 then 4 else 5 END , create_time DESC;
    

    在这里插入图片描述

    展开全文
  • mysql实现按照自定义(指定顺序排序

    万次阅读 多人点赞 2022-01-31 17:50:35
    mysql实现自定义排序

    一、mysql中实现指定排序需求

    一般情况下,我们排序都是直接利用 order by 字段 asc/desc;但是如果要排序的字段数据格式并不能直接实现,或者说我们需要指定的顺序且没有什么规律,简单的order by字段就实现不了;
    如下图中表;
    在这里插入图片描述
    我们需要按照中国银行,建设银行,工商银行顺序排序;直接使用order by 字段并不能得到我们想要的顺序
    在这里插入图片描述
    同样,对于类型我们想要按正回购,买入,卖出这样的顺序去排序,简单的order by 字段也不能实现;
    在这里插入图片描述

    二、解决方案

    1:自定义排序实现

    01. case when 转换实现自定义排序;

    使用case when 将字段中的中国银行,建设银行,工商银行,转换为1,2,3,这样在我们再使用order by实现数据的自定义重排。
    在这里插入图片描述

    02:mysql排序函数filed 实现自定义排序(推荐);

    MySQL中的field()函数,可以用来对SQL中查询结果集进行指定顺序排序。
    field(str,str1,str2,str3…)字段str按照字符串str1,str2,str3…的顺序返回查询到的结果集。如果表中str字段值不存在于str1,str2,str3中的记录,放在结果集最前面返回。
    在这里插入图片描述

    03:函数locate 实现自定义排序;

    还可以利用locate函数来实现排序;
    locate(subStr,string) :判断字符串(string)中是否包含另一个字符串(subStr),函数返回的是subStr在string中出现的位置;
    在这里插入图片描述

    04:函数lnstr 实现自定义排序;

    INSTR(STR,SUBSTR) 在一个字符串(STR)中搜索指定的字符(SUBSTR),返回发现指定的字符的位置(INDEX);
    同locate函数大致一样,不过函数内参数一个在前,一个在后;
    在这里插入图片描述

    05:利用数据字典实现自定义排序;

    对于部分相对比较固定的字段,一般可以建立数据字典项来,不仅方便返回给前端做下拉等,也方便后期添加和修改的维护,也可以在数据字典中给与对应的顺序;主要可以方便后期调整和维护;只需要修改数据字典中的排序即可;
    首先,需要在数据字典表中建立相应的数据字典项并维护顺序;
    在这里插入图片描述
    其次,存储时直接存储对应的数据字典值就可以了,然后关联查询,利用数据字典顺序排序;即可;
    在这里插入图片描述
    如果顺序有变,或者要添加新的类型,也只需要在数据字典中维护即可,不需要修改sql,扩展性较好(有需要甚至可以给与数据字典的配置页面专门维护);

    在这里插入图片描述
    在这里插入图片描述
    仅作记录,方便后续查阅,如有错误还望

    展开全文
  • 我们通常需要根据客户需求...一、如果我们只是对于在某个程序中的应用是需要按照如下的方式排序,我们只需在SQL语句级别设置排序方式:  1、按照oracled的默认方式排序:select * from table_name order by col_n
  • SQL按照指定顺序对字段进行排序

    千次阅读 2019-04-18 14:11:00
    SqlServer按照指定顺序对字段进行排序 问题如下,在SqlServer有一个这样的SQL查询 SELECT *FROM ProductWHERE ID IN ( 12490, 12494, 12486 ) 在一个名为Product的表中对自增字段ID做in查询,他希望查出来的...
  • Sql 按照指定内容排序

    2021-09-15 18:49:23
    使用方式: order by field(user_id,6,5,8);// 6,5,8为要培训的内容 排序前: 排序后:
  • SqlServer 按指定顺序进行排序

    千次阅读 2019-05-13 16:23:19
    SQLSERVER指定顺序排序代码为: CHARINDEX(RTRIM(CAST(列名 as NCHAR)),您指定排序的类型或字符串) 如下: select * from 表名 where 1=1 order by CHARINDEX(RTRIM(CAST(列名 as NCHAR)),'2,3,1') 结果是:2,3,1 ...
  • SqlServer按指定顺序进行排序

    千次阅读 2020-11-10 22:27:44
    sql一: select * from tabname where 1=1 order by CHARINDEX(RTRIM(CAST(列名 as NCHAR)),'北京,上海,广州') sql二: select * from tabname where id in(1,2,3,4,5) order by charindex(','+convert(varchar,...
  • SQL指定顺序排列

    2019-11-18 00:07:28
    找1984年的获奖者(winner),按照获奖项目(subject)升序排列,获奖项目一样的,按照获奖者升序排列,并且当获奖项目是Chemistry和Physics的放在后面,并升序排列。 (该问题来源–学SQL语句特别好的网站sqlzoo:...
  • 可以用SqlServer的CHARINDEX方法来完成对字段按照指定规则排序的需求 代码如下: select * from Student where ID in ( 1, 2, 3) order by CHARINDEX( ',' + CONVERT ( varchar (10),ID)+ ',' , ',2,1,3,' ) 说明:...
  • sql指定顺序排序

    2011-11-30 10:42:40
    Decode实际用途:Decode可以看做是逐值替换,Decode回为某个字段中的每个值在一系列的if/then测试中查找匹配值并返回指定值。 格式: Decode(value,if1,then1,if2,then2,if3,then3.......,else) 其中value代表...
  • SQL Server中使用自定义指定顺序排序

    千次阅读 2018-05-14 10:33:00
    原文:SQL Server中使用自定义指定顺序排序比如需要对SQL表中的字段NAME进行如下的排序:张三(Z)李四(L)王五(W)赵六(Z)   如果想按 “ 张三、李四、王五、赵六”的顺序排序,则可以使用以下语句: order ...
  • SqlServer 按指定顺序排序

    千次阅读 2018-02-08 14:24:48
    第一种方式:select * from tabname where 1=1 order by CHARINDEX(RTRIM(CAST(列名 as NCHAR)),优先级1内容,优先级2内容,优先级3内容') 举例:SELECT *FROM [Demo1].[dbo].[sortdemo] order by CHARINDEX(RTRIM...
  • PostgreSQL 按指定顺序排序

    千次阅读 2021-07-12 11:31:29
    因为PostgreSql没有order by field 所以按照指定顺序排序就没有这么简单了,可以使用case when then进行排序 示例一 SELECT stage, pln_status FROM project ORDER BY CASE WHEN pln_status = '规划' THEN 1 ...
  • 我们通常需要根据客户需求对于查询出来的结果给客户提供自定义的排序方式,那么我们通常sql需要实现方式都有哪些,参考更多资料总结如下(不完善的和错误望大家指出): ...2、按照自定义的顺序排序: selec...
  • oracle按照指定顺序进行排序

    千次阅读 2021-05-24 13:49:39
    之前在网上查了下按照指定顺序进行排序的方法,根据charindex来处理排序,但是在oracle发现不行,因为oracle没有charindex函数,然后使用instr代替了charindex,然后又在网上搜了另外一种方 实验如下: 1.新建表...
  • Mysql之按照指定顺序排序 场景 select <include refid="Base_Column_List" /> from student <where> id in <foreach collection="ids" item="item" open="(" separator="," close=")"> #{...
  • SQL指定顺序进行排序

    千次阅读 2014-03-28 14:30:14
    在有些情况下我们需要按指定顺序输出数据,比如选择了ID in(3,1,2,5,4)我们希望按这个3,1,2,5,4的顺序输出,这样只使用order by ID是无法实现的,但是我们可以使用order by charindex(','+convert(varchar,ID)+','...
  • DB2按照字段的指定顺序排序

    千次阅读 2019-07-02 10:08:12
    现在需要按照 2, 1, 3 的顺序排序,该怎么办呢? MySql中可以: select * from my_table where code in(1, 2, 3) order by field(code, 2, 1, 3) DB2中有个函数decode,用法为 decode(column, case1, value1, ...
  • SqlServer 的charindex 语法可以实现对字段按照指定顺序排序。 order by 中包含的条件在其他数据之前 select * from 表名 where 列名 in ('条件1','条件2','条件3') order by charindex(列名,'条件1条件2') -- ...
  • 我们通常需要根据客户需求...一、如果我们只是对于在某个程序中的应用是需要按照如下的方式排序,我们只需在SQL语句级别设置排序方式:  1、按照oracled的默认方式排序:select * from table_name order by c
  • 最近做一个大屏展示项目,类似于机场,火车站那种展示班次信息的那种,...第四:要求后端数据传输过来的顺序必须时前端指定顺序。反正要求就是,前端只需要循环出数据就好,后端搞定其余的一切需求。 有两张表:table
  • SQL 按特定字段值排序

    2020-09-11 08:41:40
    SQL 按特定字段值排序的代码,有需要的朋友可以参考下。
  • SQL自定义排序

    2022-04-19 00:27:12
    今天给大家介绍几种方法来求解这样的问题,我们先看下示例表:这张表的数据是随机录进去的,下面我们希望按照我们指定顺序输出为如下内容:注意:这里既没有按照人口的多少排序,也没有按照GDP的多少排序,更加...
  • 之前一只以为sql的功能有限只能进行升序和降序的字典排序法,经常是确定了时间排序的基础上,再将sql查询的结果放到代码里重新遍历排序,这真是个又累又痛苦的过程想想都不相干,很小的功能,实现起来却很麻烦。...
  • 我先想根据任意指定顺序对该列表进行排序,期望结果如下: 可以使用order by instr或者order by decode两种方式进行实现: select D_SORT, D_TEXT from BR_DICT where D_TYPE like '%状态%' order by instr('3

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 142,317
精华内容 56,926
关键字:

sql按照指定顺序排序