如何让SQL按ORDERBY数组顺序排列

ids = "1,2,3,4,5,6";

sql="select bookid,bookname from books where bookid in (" + ids + ") order by charindex(bookid,"+ids+")"

CHARINDEX函数返回一个整数,返回的整数是要找的字符串在被找的字符串中的位置

bookid 是要到ids中寻找所在的位置

下面的是网上查的资料

order by常用的使用方式我就不提了

项目的需求千变万化 
让我们看看下面几个怪排序需求

--先创建一个表 
create table ai( 
id int not null, 
no varchar(10) not null 

go

--往表中插入数据 
insert into ai 
 select 105,‘2‘ 
 union all 
 select 105,‘1‘ 
 union all 
 select 103,‘1‘ 
 union all 
 select 105,‘4‘ 
go

--查询效果如下: 
select * from ai 
go 
id          no         
----------- ---------- 
105         2 
105         1 
103         1 
105         4

i. 
--要求的查询结果如下 
--即要求no列的数据按‘4‘,‘1‘,‘2‘排列
id          no         
----------- ---------- 
105         4 
105         1 
103         1 
105         2

--解决方案1 
--利用函数CHARINDEX 
select * from ai 
 order by charindex(no,‘4,1,2‘)

--解决方案2,并且每组再按照id降序排列
--利用函数case 
select * from ai 
 order by case when no=‘4‘ then 1 
        when no=‘1‘ then 2 
                      when no=‘2‘ then 3 
                 end,id desc

--解决方案3 
--利用UNION 运算符 
select * from ai 
 where no=‘4‘ 
union all 
select * from ai 
 where no=‘1‘ 
union all 
select * from ai 
 where no=‘2‘

ii. 
--查询要求指定no=‘4‘排第一行,其他的行随机排序 
id          no         
----------- ---------- 
105         4 
105         2 
105         1 
103         1

--解决方案 
select * from ai 
 order by case when no=‘4‘ then 1 
   else 1+rand() 
  end

iii. 
--查询要求所有行随机排序

--解决方案 
select * from ai 
 order by newid()

iiii 
--有一表ab有列i,其中数据如下: 
i varchar(10) 
a1 
a10 
a101 
a5 
p4 
p41 
p5

--现在要求列i中数据先按字母排序,再按数字排序 
--效果如下: 
a1 
a5 
a10 
a101 
p4 
p5 
p41

--解决方案 
select * from ab 
 order by left(i,1),convert(int,substring(i,2,8000))

如何让SQL按ORDERBY数组顺序排列

时间: 2024-10-02 20:07:03

如何让SQL按ORDERBY数组顺序排列的相关文章

sql server 模拟数组【转】

sql server 模拟数组 --SQL对字符串的处理能力比较弱,比如我要循环遍历象1,2,3,4,5这样的字符串,如果用数组的话,遍历很简单,但是T-SQL不支持数组,所以处理下来比较麻烦.下边的函数,实现了象数组一样去处理字符串.一,用临时表作为数组create function f_split(@c varchar(2000),@split varchar(2)) returns @t table(col varchar(20)) as begin while(charindex(@sp

SQL 注入 OrderBy/0ctf simplesqlin

https://www.cnblogs.com/claricre/p/6187672.html http://www.w3school.com.cn/sql/sql_orderby.asp 1.  select 字段列表/* from 表名 where 条件 order by 字段名1 asc/desc, 字段名2 asc/desc,....... 2.  select 字段列表/* from 表名 where 条件 order by 字段序号 asc/desc, 字段序号 asc/desc,.

SQL对字符串数组的处理

一,用临时表作为数组 复制代码代码如下: create function f_split(@c varchar(2000),@split varchar(2)) returns @t table(col varchar(20)) as begin while(charindex(@split,@c)<>0) begin insert @t(col) values (substring(@c,1,charindex(@split,@c)-1)) set @c = stuff(@c,1,chari

SQL字符串转换为数组

/*一.按指定符号分割字符串,返回分割后的元素个数,方法很简单,就是看字符串中存在多少个分隔符号,然后再加一,就是要求的结果. -----rtrim(@str)去掉 @str右边的字符 ltrim(@str)去掉左边的字符 ltrim(rtrim(@str))去掉左右空格 -------charindex  在变量@str中@split的index即索引值 create function Get_StrArrayLength ( @str varchar(5000), --要分割的字符串 @sp

sql把字符数组转换成表 :把字符串1,2,3变成表里的行数据

需求:把字符串1,2,3变成表里的行数据 方法:用自定义函数实现 /* 获取字符串数组的 Table */ if exists (select 1 from sysobjects where id = object_id('Get_StrArrayStrOfTable' )) drop Function Get_StrArrayStrOfTable go CREATE function Get_StrArrayStrOfTable( @SourceSql varchar (max), @StrS

linux_shell_类似sql的orderby 取最大值

{"time":"2015.08.14 21:45:13","total":999224516} {"time":"2015.08.14 21:45:24","total":999225424} {"time":"2015.08.14 21:45:34","total":999226141} {"time":

SQL写操作 设置内容 (数组转字符串)

SQL写操作 设置内容 (数组转字符串) SQL set内容 SQL操作数组转字符串 SQL写操作 set内容 (数组转字符串) [ 封装方法 ] function getSqlSet( $data ){ $Str = "";  foreach( $data as $k => $v ){  $Str.= $k."='".$v."',";  }  $Str = substr($Str,0,-1);  return $Str;  }  如执行i

MyBatis传入参数为集合、数组SQL写法

参考:http://blog.csdn.net/small____fish/article/details/8029030 foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合.foreach标签的属性主要有item,index,collection,open,separator,close. item 表示集合中每一个元素进行迭代时的别名,随便起的变量名: index 指定一个名字,用于表示在迭代过程中,每次迭代到的位置,不常用: open 表示该语句以什么开始,常用"

[顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功)

原文:[顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功) [顶]ORACLE PL/SQL编程详解之二: PL/SQL块结构和组成元素(为山九仞,岂一日之功) 继上四篇:ORACLE PL/SQL编程之八:把触发器说透                ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!)                [推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到) [推荐]