T-SQL中与MySQL语法LIMIT x,y相当的是什么?

21

1
以下没有一个答案展示了 SELECT * 的语法,所以在这里给出:SELECT TOP(5) * FROM [TableName] - user6269864
4个回答

30

从SQL Server 2012开始,您可以编写

...
ORDER BY thisColumn, thatColumn
OFFSET 5 ROWS FETCH NEXT 5 ROWS ONLY

1
FETCH NEXT <N> is zero indexed so to get the first and only first row do OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY - fartwhif

25

正如我一个小时之前所说,你必须使用 TOP!(LIMIT 仅用于 MYSQL)

因此,请尝试删除 LIMIT 5 并执行 SELECT TOP(5) apretiz

同时,请添加 order by(与之前相同的原因)。

在提问之前请先进行搜索。旧问题链接


6
使用 TOP 关键字:
 SELECT TOP 5 pretiz 
 FROM tableApoint WHERE price = '$newprice'

使用 LIMIT 5, 10 不是 SQL 标准的一部分,只能在 MySQL 中使用。

你可以在 SQL 中使用 ROW_NUMBER() 作为临时解决方案,它将会给你相同的期望输出结果。

SELECT * FROM ( 
  SELECT *, ROW_NUMBER() OVER (ORDER BY name) as row FROM tableApoint 
) a WHERE row >= 5 and row <= 10

2

SQL Server 2005及以上版本

如果您使用的是SQL Server 2005及以上版本,则可以使用ROW_NUMBER函数为行分配唯一编号,然后从输出中选择值范围。

脚本:

CREATE TABLE table1
(
    textvalue VARCHAR(10) NOT NULL
);

INSERT INTO table1 (textvalue) VALUES
   ('i'),
   ('a'),
   ('e'),
   ('h'),
   ('c'),
   ('l'),
   ('g'),
   ('m'),
   ('d'),
   ('k'),
   ('j'),
   ('f'),
   ('b'),
   ('n');

;WITH letters as
(
    SELECT  textvalue
        ,   ROW_NUMBER() OVER(ORDER BY textvalue) rownum 
    FROM    table1
)
SELECT  textvalue
FROM    letters
WHERE   rownum  BETWEEN 6 AND 10;

输出:

TEXTVALUE
---------
    f
    g
    h
    i
    j

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接