sql server实现Mysql中的limit分页功能

没有使用ORM框架前,一直使用原生sql分页,突然想起来,便随手一记吧。。

首先,在mysql 中有一种常见的分页方式

  • LIMIT总是设定为pageSize

  • OFFSET计算公式为pageSize * (pageIndex - 1)

    SELECT id, name, gender, score FROM students ORDER BY score DESC LIMIT 3 OFFSET 0;

但是在sql server中没有limit关键词,相对应的是TOP关键字,所以可以使用以下方法查询

方法一:在这里查询的是根据userID排序的第7,8,9条

1SELECT * 2FROM dbo.t_user 3WHERE userID IN ( SELECT TOP 3 4 userID 5 FROM t_user 6 WHERE userID NOT IN ( SELECT TOP 6 7 userID 8 FROM t_user ) )

方法二:其中的PageSize(分页的大小)和PageIndex(分页索引,初始假设为1)均为变量

1SELECT * 2FROM ( SELECT TOP PageSize 3 * 4 FROM ( SELECT TOP [PageIndex*PageSize] 5 * 6 FROM dbo.t_user 7 ORDER BY id ASC 8 ) AS b 9 ORDER BY id DESC 10 ) AS c 11ORDER BY id ASC;

方法三:其中的PageSize(分页的大小)和PageIndex(分页索引,初始假设为1)均为变量

1SELECT * 2FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY userID ASC ) AS rownumber , 3 * 4 FROM dbo.t_user 5 WHERE 1 = 1 6 ) AS t 7WHERE t.rownumber > (PageSize *(PageIndex-1)) 8 AND t.rownumber <= (PageSize *PageIndex)
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

mysql设置时区

mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0