关于SQL语句:MySql转成SQLServer

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于SQL语句:MySql转成SQLServer相关的知识,希望对你有一定的参考价值。

String sql = "select * from ec_order " + clause
+ " order by id desc limit " + (page - 1) * pagesize + ","
+ pagesize;
上面这句是mysql的sql语句,但是我不会用mysql只会sqlserver,请问上面这句怎么转成sqlserver的语句?请大神帮忙啊!


假设 clause =  where 1=1
假设 pagesize = 10  page = 1
也就是每页10行数据, 查询第1页


-- MYSQL 下面执行的语句:
select * from ec_order 
where 1=1
order by id desc limit 0 , 10;


-- 切换到 SQL Server
select top 10 * 
from ec_order 
where 1=1
order by id desc


假设 pagesize = 10  page = 2
也就是每页10行数据, 查询第2页

-- MYSQL 下面执行的语句:
select * from ec_order 
where 1=1
order by id desc limit 10 , 10;


-- 切换到 SQL Server  方案1.
select top 10 * 
from ec_order 
where 1=1   AND   id  NOT  IN  (SELECT  top 10 id  FROM  ec_order where 1=1 order by id desc)
order by id desc


-- 切换到 SQL Server  方案2.
SELECT *
FROM
(
select  ROW_NUMBER() OVER(ORDER BY id desc) AS NO,  ec_order.* 
from ec_order
where 1=1 
)
WHERE NO between 11 and 20


-- 切换到 SQL Server  方案3.
select top 20 * from ec_order where 1=1 order by id desc
EXCEPT
select top 10 * from ec_order where 1=1 order by id desc

参考技术A --第一种方式[针对数据量较小的分页统计]
drop table #tmp;
Select identity(int,1,1) as id,* into #tmp from songlist
select sourcefilename ,songname,videotype,singerid,singer,songpic from #tmp where id between 200 and 300;
select count(*) as n1,ceiling(count(*)/200) as n2 from songlist;
--第二种方式[主要针对数据量稍微大点的 分页统计 先按照主键排序]
declare @pagerow int ,@pageid int
set @pagerow = 100;--每页显示的个数
set @pageid = 2;--第几页
select top @pagerow sourcefilename, songname,videotype,singerid,singer,songpic from songlist
where sourcefilename not in (select top @pagerow*(@pageid-1) sourcefilename from songlist order by sourcefilename)
order by sourcefilename;追问

能举个例子吗?看不懂上面的代码啊?

追答

就是给ec_order 表添加一个字段 让他自动增长 然后插入到临时表中 然后直接用between and 查询 要查的 区间就可以了

sqlserver中如何写查询语句

现在有一个表中的字段为datetime 格式是这样的20100221/12:20:21
如果我现在在text1中输入开始时间12:10
在text2中输入结束时间12:58
以上两个时间为一个时间段也就是说 上边的那个记录在这个时间段中
那么需要怎么写where条件才能让查询结果匹配到上边表中的记录

你可以用find来查询,find后面提供了比较大小的操作,比如find "start_data >#2010/02/21/12:20#",结束时间同理 参考技术A 拼接一下字串再转成datetime进行查询

where 字段>convert(datetime,'2010-02-21' + ' ' + text1.text) and ...

以上是关于关于SQL语句:MySql转成SQLServer的主要内容,如果未能解决你的问题,请参考以下文章

关于sql和MySQL的语句执行顺序(必看!!!)

mysql数据库中sql修改字段类型要怎么做

关于MySQL的1064错误

[MySQL]关于mysql的命令语句执行mysql的脚本文件。如下图,想知道为啥会出现这样的问题~应该要怎么解决

将MSSQL表数据转成SQL语句

从建表到关于sql和MySQL的查询语句执行顺序最新详解