重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
--从Table 表中取出第 m 条到第 n 条的记录:(Not In 版本)
为连云等地区用户提供了全套网页设计制作服务,及连云网站建设行业解决方案。主营业务为成都网站设计、做网站、连云网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
SELECT TOP n-m+1 * FROM Table WHERE (id NOT IN (SELECT TOP m-1 id FROM Table ))
--从TABLE表中取出第m到n条记录 (Exists版本)
SELECT TOP n-m+1 * FROM TABLE AS a WHERE Not Exists
(Select * From (Select Top m-1 * From TABLE order by id) b Where b.id=a.id )
Order by id
--m为上标,n为下标,例如取出第8到12条记录,m=8,n=12,Table为表名
Select Top n-m+1 * From Table
Where Id(Select Max(Id) From
(Select Top m-1 Id From Table Order By Id Asc) Temp)
-----------------------------------------------------------------------------------------------------------------------------------------
表pictures中有两个字段:id与title。id是自动编号的
表中有5条记录:1--p1,2--p2,3--p3,4--p4,5--p5
一、找到了一个小规律
string sqlstr = "select top 4 * from pictures order by id desc "; //查询结果p5,p4,p3,p2---说明是整个表先进行排序,再进行查询的
string sqlstr = "select top 3 * from (select top 4 * from pictures order by id desc) "; //-------p5,p4,p3
string sqlstr = "select top 3 * from (select top 4 * from pictures order by id desc) order by id desc";//-------p5,p4,p3
string sqlstr = "select top 3 * from (select top 4 * from pictures order by id desc) order by id asc"; //-------p2,p3,p4
二、获取单条记录:
假设表中一共有counts条记录,现在想要查询第n条记录,则sql语句应是:
select top 1 * from (select top (counts-n+1) * from pictures order by id desc) order by id asc
第三条记录:
string sqlstr = "select top 1 * from (select top 3 * from pictures order by id desc) order by id asc";//-------p3
三、获取表中多条连续的记录
假设表中一共有counts条记录,现在想要查询第n到第m条的记录,则sql语句应是:
select top (m-n+1) * from (select top (counts-n+1) * from pictures order by id desc) order by id asc
获取第二到第四条记录:
select
substring(字段名,charindex('-',字段名,0)+1,len(字段名)-charindex('-',reverse(字段名),0)-charindex('-',字段名,0))
from
表名
substring是截取函数
charindex是算特定符号位置的函数
reverse是把字符串排反序的函数
了解一下这三个函数吧,这句你就应该懂了,我这句刚才试验了一下,没问题,环境sqlserver2000
请采纳。
我说1个笨方法哈
select top 300 * into #table from table order by 排序条件
delete top 199 * from #table order by 排序条件
select * from #table order by 排序条件
说明:
这是用虚拟表写的,方法比较笨,简单的铁定会有,你多想想
我是采取取出来目的记录,然后过滤掉不要的记录,剩下的就是你想要的了
因为你是要200~300条,所以必须要有按什么来排序的条件,排序不同,结果也不同的
你试试,OK,请采纳
从SQLServer 2005开始就支持ROW_NUMBER()函数
用法如下
WITH TEMP AS
(
SELECT *,ROW_NUMBER() OVER(ORDER BY Id) AS RID
FROM 表
)
SELECT *
FROM TEMP
WHERE RID BETWEEN 100 AND 200;
这个查询里假设表有一个id列,用id列来排序,确定结果集的顺序,当然可以换成其它1个或多个列来确定排序的顺序,按排序的顺序会生成一个从1开始的自增序列,在SELECT的时候按需要取序列的某段值就行了。 至于WITH的用法就不多说了,这也是从SQL Server 2005开始增加的公用表表达式。
sql截取 两个特定值之间的文字
可以使用substring() 截取 和 charindex()
CHARINDEX函数调用方法如下:
CHARINDEX ( expression1 , expression2 [ , start_location ] )
Expression1是要到expression2中寻找的字符中,start_location是CHARINDEX函数开始在expression2中找expression1的位置。
substring函数调用方法如下:
substring(string,startNumber, endNumber)
返回第一个参数中从第二个参数指定的位置开始、第三个参数指定的长度的子字符串。
例子:
CHARINDEX('SQL', 'Microsoft SQL Server')
这个函数命令将返回在“Microsoft SQL Server”中“SQL”的起始位置,在这个例子中,CHARINDEX函数将返回“S”在“Microsoft SQL Server”中的位置11。
SubString("12345",2,3)
调用以下函数返回“2345”:
假设你要显示Northwind数据库Customer表前5行联系人列的Last Name。这是前5行数据
ContactName
------------------------------
Maria Anders
Ana Trujillo
Antonio Moreno
Thomas Hardy
Christina Berglund
你可以看到,CustomName包含客户的First Name和Last Name,它们之间被一个空格隔开。我用CHARINDX函数确定两个名字中间空格的位置。通过这个方法,我们可以分析ContactName列的空格位置,这样我们可以只显示这个列的last name部分。这是显示Northwind的Customer表前5行last name的记录!
select top 5 substring(ContactName,charindex(’ ’,ContactName)+1 ,
len(ContactName)) as [Last Name] from Northwind.dbo.customers
下面是这个命令输出的结果。
Last Name
------------------------------
Anders
Trujillo
Moreno
Hardy
Berglund
没有,这个得自己写,我给你复制一段:
CREATE TABLE tsgss(id varchar(20),a int)
INSERT tsgss SELECT '0001',1
UNION ALL SELECT '0002',3
UNION ALL SELECT '0003',66
UNION ALL SELECT '0004',34
UNION ALL SELECT '0005',6
UNION ALL SELECT '0006',45
UNION ALL SELECT '0007',23
UNION ALL SELECT '0008',33
UNION ALL SELECT '0009',7
UNION ALL SELECT '0010',9
go
CREATE FUNCTION getMid()
RETURNS float
AS
BEGIN
DECLARE @s table(id int identity(1,1),a int)
DECLARE @g float
INSERT @s SELECT a FROM tsgss
IF @@ROWCOUNT %20
SELECT @g=a FROM @s WHERE id=(SELECT min(id)+max(id) FROM @s)/2
ELSE
SELECT @g=avg(a*1.0) FROM @s WHERE id in(SELECT max(id)/2 FROM @s UNION ALL SELECT max(id)/2+1 FROM @s)
RETURN @g
END
SELECT dbo.getMid()