在SQL Server中按范围选择数据

时间:2014-10-15 08:51:18

标签: sql sql-server

假设我在tbl_students中有500条记录。我想选择从50和250开始的记录。我知道我可以在MySql中使用以下方式。

SELECT *
FROM tbl_students
LIMIT 50,100;

我想知道如何在SQL Server中执行此操作。浏览后我找到了这样的解决方案。

select top 100 * 
from tablename  
WHERE column_name BETWEEN 50 AND 250

我面临的问题是我不知道表中任何列的值,所以我不能像上面那样编写查询。在MySql中,我们可以在不知道列内的值的情况下为范围放置limit

提前致谢

3 个答案:

答案 0 :(得分:3)

SELECT * FROM ( 
  SELECT *, ROW_NUMBER() OVER (ORDER BY column_name ) as tbl_row FROM tbl_students
 ) tbl WHERE tbl_row >= 50 and tbl_row <= 250

我认为这是在2005版本以上的SQL Server中执行此操作的方法之一。

答案 1 :(得分:3)

您想要排序的列不清楚。表没有隐式顺序,因此如果您没有指定如何订购记录,则不能说“在x和y之间给我记录”。

但是,假设column_name是您要使用的列并且您正在使用SQL Server 2005或更高版本,则可以使用CTEROW_NUMBER窗口函数:< / p>

WITH CTE AS
(
   SELECT t.*, R = ROW_NUMBER() OVER (ORDER BY column_name)
   FROM dbo.TableName t
)
SELECT * FROM CTE WHERE RN BETWEEN 50 AND 250

答案 2 :(得分:3)

如果您正在使用 SQL Server 2005/08 ,那么您可以使用CTE ...

;WITH cteRange as 
(
select *, rownumber=ROW_NUMBER() OVER (Order by field) 
from tablename  
)
SELECT * FROM cteRange WHERE rownumber BETWEEN 50 AND 250

如果你有 SQL Server 2012 ,那么......

SELECT 
  *
FROM tablename  
 ORDER BY field
  OFFSET 50 ROWS 
  FETCH NEXT 200 ROWS ONLY 

知道 RDBMS 以及要提取和排序的列,而不是使用SELECT *...

会很有用