博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL Server 系统时间
阅读量:5007 次
发布时间:2019-06-12

本文共 2521 字,大约阅读时间需要 8 分钟。

getdate()函数:取得系统当前的日期和时间。返回值为datetime类型的。

用法:getdate()

例子:

select getdate() as dte,dateadd(day,-1,getdate()) as nowdat

 

datepart()函数:以整数的形式返回时间的指定部分。

用法:datepart(datepart,date)

参数说明:datepart时要返回的时间的部分,常用取值year、month、day、hour、minute、second

date是所指定的时间。

例子:

select datepart(month, getdate()) as'Month Number'

 

dateadd()函数:通过给指定的时间的指定部分加上一个整数值以返回一个新时间值。

用法:dateadd(datepart,number,date)

参数说明:datepart(同上)

date(同上)

number要增加的值,整型,可正可负,正值返回date之后的时间值,负值返回date之前的时间值

例子:

select getdate() as today

select dateadd(day,-1,getdate())

select dateadd(day,1,getdate())

 

datediff()函数:返回两个时间以指定时间部分来计算的差值。返回整数值。

如1991-6-12和1991-6-21之间以天来算相差9天,1998-6-12和1999-6-23按年算相差1年,1999-12-1和1999-3-12按月算相差9个月

用法:datediff(darepart,date1,date2)

参数说明:datepart(同上)

date1、date2(同上date)

例子:

select datediff(month,'1991-6-12','1992-6-21') as a

 

常用时间函数:

使用时间和日期的函数

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):获取指定时间的年份

 

 

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
这种方式比使用临时表分页效率更高。

 

转载于:https://www.cnblogs.com/Sea1ee/p/5991273.html

你可能感兴趣的文章
JS获取中文拼音首字母,并通过拼音首字母高速查找页面内的中文内容
查看>>
站长VS微商 你选择哪个?
查看>>
LeetCode :: Convert Sorted Array (link list) to Binary Search Tree [tree]
查看>>
iOS_22自定义键盘工具栏
查看>>
输入 URL 到页面完成加载过程中的所有发生的事情?
查看>>
Cocos2dx 3.0 过渡篇(二十五)死不了的贪食蛇(触摸版)
查看>>
XPath定位时,使用文本的方法小技巧。
查看>>
EBS 信用检查(二)
查看>>
JZOJ 1781. Number
查看>>
.NET学习杂记
查看>>
高光导航、文字模糊
查看>>
nhibernate3 linq的where操作
查看>>
centos下Elasticsearch数据迁移与备份
查看>>
设置进程和线程的优先级
查看>>
android studio环境下创建menu问题(标题栏显示问题)
查看>>
MVC其实很简单(Django框架)
查看>>
UIScrollView 原理
查看>>
linux在tomcat中指定jdk
查看>>
vue学习(二)Vue常用指令
查看>>
《中国作者英文科学写作中的常见语法问题(一)》
查看>>