- 浏览: 205824 次
- 性别:
- 来自: 紫禁城
文章分类
最新评论
-
a1439226817:
<!doctype html><html l ...
发布一个支持N级下拉列表联动的控件 -
a1439226817:
也不高个测试的demo,别人怎么用啊
发布一个支持N级下拉列表联动的控件 -
davaidgao:
不全啊,这是
Spring3.x权威开发指南 -
caizi12:
对于map绑定很是不方便,现在的做法,需要创建一User类,再 ...
浅谈 SpringMVC 数据绑定 -
joeyhuang:
不全啊..
Spring3.x权威开发指南
SQL server2005常用的函数和分页的几个解决方案:
使用时间和日期的函数
getdate():获取系统当前时间
dateadd(datepart,number,date):计算在一个时间的基础上增加一个时间后的新时间值,比如:dateadd(yy,30,getdate())
datediff(datepart,startdate,enddate):计算两个时间的差值,比如:datediff(yy,getdate(),'2008-08-08')
dataname(datepart,date):获取时间不同部分的值,返回值为字符串
datepart(datepart,date):和datename相似,只是返回值为整型
day(date):获取指定时间的天数
month(date):获取指定时间的月份
year(date):获取指定时间的年份
问题1:
表A是一个不断有新记录增加的表,字段t就是记录的插入时间,现在想知道每10秒钟插入到该表的
记录总数大于N条的时间和记录条数,并按由大到小的顺序排序,请写出完成该功能的SQL语句。
解决方案:
declare @t datetime
select @t=min(t) from B
select max(t) as maxT,min(t) as minT,count(*) as Num from B group by
datediff(ss,@t,t)/10 having count(*)>1 order by count(*) desc
全局变量:
以@@开头,且不能由用户自定义,下面来看几个常用的全局变量:
@@rowcount :表示最近一个语句影响的行数。
@@error:上一条sql语句返回的错误信息。
@@identity:对有标识列的表而言,系统会为表每生成一个新的标识号,这个变量记录的就是最近产生的id。
rowcount:会话级全局变量,比如set rowcount 3 ,就是设置返回的记录数最多是3条,此变量的作用类似于
top子句,TOP 子句适用于指定了该子句的单个 SELECT 语句。SET ROWCOUNT 将一直有效,直到执行另一个
SET ROWCOUNT 语句,例如 SET ROWCOUNT 0 将关闭该选项。
indetity_insert:会话级全局变量
任何时候,一个会话中只有一个表的 IDENTITY_INSERT 属性可以设置为 ON。如果某个表已将此属性设
置为 ON,则对另一个表发出 SET IDENTITY_INSERT ON 语句时,SQL Server 2005 将返回一个错误信息,
指出 SET IDENTITY_INSERT 已设置为 ON,并报告已将其属性设置为 ON 的表。
如果插入值大于表的当前标识值,则 SQL Server 自动将新插入值作为当前标识值使用。
SET IDENTITY_INSERT 的设置是在执行或运行时设置的,而不是在分析时设置的。
dbcc checkident (table_name,reseed,n):此语句的功能是更正列的当前标识值,把table_name的标
识符设置为n。如果当标识列中存在 PRIMARY KEY 或 UNIQUE 约束时,无效标识信息会导致错误消息 2627。
SQL Server的几个分页解决方案:
解决方案1:
declare @pageIndex int,@pageSize int,@recordNum int
set @pageIndex=3
set @pageSize=3
select top(@pageSize) * from Grade where id not in (select top
((@pageIndex-1)*@pageSize) id from Grade)//显示出第 7 到 第 9 条
select @recordNum=count(*) from Grade//显示总记录数
点评:效率不高,而且取出来的数据是按id排序的。如果想按其他字段排序就不行。
解决方案二:
declare @id int
--set rowcount 3
--select @id=id from Grade
select top 3 @id=id from Grade//这句等效于上面注视的两句
select top 3 * form Grade where id>@id//查询出第 4 到第 6 条记录
点评:效率比方案一稍高,但是取出来的数据是也按id排序的。如果想按其他字段排序就不行
解决方案三:
create table #table(new_id int identity(1,1) primary key,id int)
insert into #table(id) select id from grade
select a.* from grade a join #table b on (b.new_id between 6 and 9) and a.id=b.id
//取出第 6 到第 9 条,
点评:其原理是把要分页的表的主键插入到临时表中,临时表的字段就是一个标识列和要分
页的表的主键列(包括是多个主键的情况,上面的两种方法就不行)。特点是效率高,取出
来的数据能根据自己要求的字段排序。
临时表:
上面的解决方案三就是使用了临时表,它与永久表相似,但临时表存储在 tempdb 中,当不
再使用时会自动删除。
临时表有两种类型:本地和全局。它们在名称、可见性以及可用性上有区别。本地临时表
的名称以单个数字符号 (#) 打头;它们仅对当前的用户连接是可见的;当用户从 SQL Server
实例断开连接时被删除。全局临时表的名称以两个数字符号 (##) 打头,创建后对任何用户
都是可见的,当所有引用该表的用户从 SQL Server 断开连接时被删除。
表级变量:
象上面分页的例子也可以使用表级变量,象下面这样:
declare @table table (newid int identiey(1,1),id int)
insert into @table(id) select id from grade
select a.* from grade a join @table b on (b.new_id between 6 and 9) and a.id=b.id
这种方式比使用临时表分页效率更高。
字符串函数:
left(stringExp,intExp):取字符串左边多少个字符
len(strExp):计算指定字符串的长度
char(intExp):根据指定字符的ASCII码返回相应的字符
ascii(strExp):将一个字符转换成相应的ascii码
lower(strExp):将字符串转换为小写
Upper(strExp):将字符串转换为大写
Ltrim(strExp):去字符串左边的空格
rtrim(strExp):去字符串右边的空格
substring(strExp,intExp,intExp):按指定的索引截取一个字符串的子字符串
replace(strExp,strOldStr,strNewStr):将字符串中的部分内容用新的字符串来代替
系统其他转换函数:
isnull(逻辑表达式,代替值):判断逻辑表达式是否为null,是的话就用指定的值代替。
convert()和cast:
CAST 函数和 CONVERT 函数还可用于获取各种特殊数据格式,并可用于选择列表、WHERE
子句以及允许使用表达式的任何位置中。如果希望 Transact-SQL 程序代码符合 SQL-92,
请使用 CAST 而不要使用 CONVERT。如果要利用 CONVERT 中的功能,请使用 CONVERT
而不要使用 CAST。
使用 CAST 或 CONVERT 时,需要提供以下信息:
要转换的表达式;例如,销售报表要求销售数据从货币数据转换为字符数据。
要将指定的表达式转换为的数据类型,例如 varchar 或其他 SQL Server 系统数据类型。
除非将被转换的值存储起来,否则转换仅在 CAST 函数或 CONVERT 函数的作用时间范围内有效。
如果转换时没有指定数据类型的长度,则 SQL Server 自动将 30 作为长度值。
问题:
有一张商品表,里面三个字段:购买日期,购买人,价格。现在要统计每个购买人每一
季度的消费总价,并算出小计(也就是这一年消费的总价)
解决方案:
创建一张shop表:
create table shop
(
selldate datetime default(getdate()),
name varchar(20),
price money,
)
加入一些测试数据:
insert into shop(selldate,name,price) values('2006-05-12','张三',75)
insert into shop(selldate,name,price) values('2006-07-12','张三',50)
insert into shop(selldate,name,price) values('2006-09-12','张三',43)
insert into shop(selldate,name,price) values('2006-11-12','李四',67)
insert into shop(selldate,name,price) values('2006-01-12','李四',98)
insert into shop(selldate,name,price) values('2006-06-12','李四',100)
insert into shop(selldate,name,price) values('2006-08-12','王五',134)
insert into shop(selldate,name,price) values('2006-04-12','王五',165)
insert into shop(selldate,name,price) values('2006-10-12','王五',85)
insert into shop(selldate,name,price) values('2006-08-12','赵六',11)
insert into shop(selldate,name,price) values('2006-12-12','赵六',165)
insert into shop(selldate,name,price) values('2006-02-12','赵六',17)
insert into shop(selldate,name,price) values('2006-01-12','赵六',198)
select * from shop
解决问题的select语句:
select name 姓名,
sum(case when datepart(q,selldate)=1 then price else 0 end) 第一季度,
sum(case when datepart(q,selldate)=2 then price else 0 end) 第二季度,
sum(case when datepart(q,selldate)=3 then price else 0 end) 第三季度,
sum(case when datepart(q,selldate)=4 then price else 0 end) 第四季度,
sum(price) 小计
from shop group by name
发表评论
-
Oracle用imp和exp实现数据的导入和导出
2010-08-23 16:28 1250使用方法如下: Imp username/password@c ... -
Informix解决中文乱码问题
2009-04-18 11:38 1177连接字符串格式为: jdbc:informix-sqli ... -
不同数据库获取前N条记录的Sql书写
2009-04-18 16:44 1397不同数据库获取前N条记录的Sql书写 1. OR ... -
从数据库表中随机获取N条记录的SQL语句
2009-08-03 14:24 1451Oracle: select * from (se ... -
mysql笔记
2006-09-15 09:29 638MySql学习: 一. 要把 ... -
精妙sql语句
2006-09-15 09:31 596下列语句部分是Mssql语句,不可以在access中使用。 ... -
一个jdbc连接mysql的小例子
2006-09-15 09:35 1888创建数据库 指定数据 ... -
Create database/Create table 示例(Sql Server2005语法)
2006-09-18 10:05 2022use master go if exists (se ... -
学习SQL server2005
2006-09-18 12:51 967SQL 语言分类: DQL:数据查询语言,比如select D ... -
一道有趣的SQL题目
2006-09-18 13:09 774--题目: --已知:现有个学生,每个学生有十门课程的成绩 ... -
一个sql server2005分页的存储过程
2006-09-18 13:47 944--sql server 分页语句 --首先创建一个测试用 ... -
Sql Server游标和数据库设计
2006-10-07 22:27 1150游标:在java里面返回的ResultSet是一个游标,nex ... -
Oracle9i的简化SQL语法
2006-11-01 13:14 718Oracle9i的简化SQL语法 Oracle对Oracl ... -
MySQL鲜为人知的10条技巧[转]
2006-11-01 13:17 748MySQL鲜为人知的10条技巧[转] MySQL易学易用, ... -
MYSQL数据库的中文问题
2006-11-01 14:33 606中文显示问题一直是困扰我们的一个难题,不信你上google搜索 ... -
解决mysql中文乱码的根源
2006-11-06 09:42 980解决mysql中文乱码的根源在mysql的安装目录下(笔者安装 ... -
SQL语法中Order by的用法
2007-06-17 01:01 1119以前总是以为order by 后面只能跟列名,原来Or ...
相关推荐
关于SQL Server SQL语句查询分页数据的解决方案 在日常工作中,我们经常需要处理大量数据,并从中获取特定页面的数据。特别是在Web应用开发中,为了提高用户体验,通常会将数据进行分页显示。针对这一需求,本文将...
在VS2005和SQL Server 2000的环境下,分页存储通常涉及到以下几个步骤: 1. **SQL查询优化**:使用`TOP`和`ORDER BY`关键字来获取指定页码的数据,同时通过索引提高查询效率。例如,如果要获取第n页的数据,可以...
本篇资料主要探讨的是在SQL Server中,利用存储过程实现分页查询时的性能对比,旨在帮助数据库管理员选择最优的解决方案。 分页通常有多种实现方式,包括ROW_NUMBER()函数、游标、变量以及一些自定义的存储过程。...
通过上述分析可以看出,该存储过程通过动态SQL技术实现了对多表联合查询的支持,并结合分页需求构建了一个较为完整的解决方案。这种设计不仅提高了查询的灵活性,还保证了性能的高效性。在实际应用中,可以根据具体...
SQL Server 2005的核心知识点包括以下几个方面: 1. **安装与配置**:学习如何在不同的操作系统环境下安装SQL Server 2005,包括选择正确的版本、设置安装选项、配置网络协议和服务等。此外,了解如何进行数据库...
对于千万级数据的分页,存储过程是一个有效的解决方案。存储过程可以封装复杂的逻辑,如动态计算页码和每页大小,同时提供返回总记录数的功能。这有助于实现更高效的分页查询,并且可以缓存执行计划,进一步提升性能...
在IT行业中,数据库管理和数据查询优化是至关重要的环节。MyBatis、Spring和SQL Server、MySQL这...在提供的压缩包文件“sqlserver分页”中,可能包含的是针对SQL Server分页查询的示例代码或配置,供开发者参考学习。
本文将详细介绍并对比SQL Server中常用的三种分页查询方法:Top + 嵌套查询、ROW_NUMBER() 开窗函数以及 Offset Fetch,并探讨它们在.NET环境下的应用。 1. Top + 嵌套查询: 这种方法适用于所有SQL Server版本。...
本书不但融合了作者在使用SQL Server 2000过程中遇到的各种常见问题和应用案例,还总结了作者几年来在CSDN 社区SQL Server版所解决的大量问题,面向实际项目需求,涉及不同类型的应用,能够多角度地引导读者学习相关...
通过本文对SQL Server分页技术的详细介绍,我们了解到从数据库层面实现分页不仅可以显著提高查询效率,还能提供更好的用户体验。掌握了这些技巧后,开发者可以更加灵活地应对各种复杂场景下的数据处理需求。
在SQL Server中,脚本规范需要遵守T-SQL的语法,包括对表、视图、索引的操作以及使用内置函数和动态SQL。此外,SQL Server的存储过程和触发器也是重要的脚本编写部分,它们可以增强数据库的逻辑和安全性。 MySQL ...
本文将深入探讨一个基于JSP(JavaServer Pages)技术和SQL Server数据库构建的网上书店系统,旨在提供本地测试环境下的具体实现方案。 首先,JSP是Java平台上的动态网页技术,它允许开发人员在HTML代码中嵌入Java...
在VB和SQL Server的集成编程中,主要涉及以下几个核心知识点: 1. 数据连接:VB通过ADO.NET或OLE DB连接到SQL Server,建立数据源和应用之间的桥梁。开发者需要掌握如何编写正确的连接字符串,并理解不同连接方式的...
该系统是《C#数据库系统开发案例精选》一书中的一个实例,旨在提供给开发者一个完整的电商解决方案,帮助学习者理解和实践C#与数据库交互的技术。 首先,让我们深入了解Visual Studio 2005(VS2005)。这是一款由...
这个压缩包包含了几个关键文件,如PageDataBaseManager.java、DataBaseManager.java、Pager.java等,以及相关的使用说明和文档,旨在提供一种高效的分页解决方案。 首先,我们来看`DataBaseManager.java`,这是一个...
在 SQL Server 中,OFFSET/FETCH 是一种常用的分页方法。语法如下: ```sql SELECT * FROM ( SELECT ROW_NUMBER() OVER (ORDER BY [排序字段]) AS RowNum, [其他字段] FROM [表名] ) AS SubQuery WHERE RowNum ...
综上所述,"SQL 万能分页存储过程"旨在提供一个高效且灵活的解决方案,以应对各种规模数据库的分页查询需求。通过使用存储过程,开发人员可以更轻松地管理和控制数据库查询,提升应用程序的性能。在实际使用中,需要...
【BBS jsp+Sql server】是一个基于Java的Web应用程序,使用了JSP(JavaServer Pages)技术来构建用户界面,结合SQL Server数据库来存储和管理论坛的数据。这个项目旨在实现一个基本的在线讨论平台,其中包括了登录、...
这个"万能分页3.0"的压缩包很可能包含了一个完整的分页解决方案,包括了Java代码、配置文件、可能的示例JSP页面等,帮助开发者快速集成到自己的项目中。学习和理解这些分页代码,不仅可以提升开发效率,也能加深对...
在ASP中实现分页,通常需要以下几个关键步骤和知识点: 1. **数据库连接**:首先,需要建立与数据库的连接,如通过ADODB.Connection对象连接到SQL Server或其他数据库。 2. **SQL查询**:编写一个SQL查询语句,...