一、游标函数与变量
游标可以处理多行数据,在过程循环中一次访问一行。和基于集合的高效操作相比,这个功能对系统资源的消耗更大。
可以用一个函数和两个全局变量来管理游标操作
1、CURSOR_STATUS() 函数
cursor_status()函数返回一个整型值,表示传递给这个函数的游标类型遍历的状态。有很多不同类型
游标会影响这个函数的操作。
函数常见的返工值
2、@@CURSOR_ROWS 全局变量
@@cursor_rows变量是一个整型值,表示在当前连接中打开的游标中的行数。根据游标类型,这个值也能不
代表结果集中的实际行数。
3、@@FETCH_STATUS 全局变量
@@fetch_status 变量是一个标记,用于表示当前游标指针的状态。这个变量主要用来判断某行是否存在,以及
在执行了fecthc next 语句后,是否已执行到结果集的尾部。打开游标时,@@fetch_status变量值为-1。 一旦把第
一个值放在游标中,@@fetch_status变量值就变成0.当不再把更多行放在游标中时,该变量的值将变回-1。
游标例子:
---游标循环遍历(不带事务)-- begin declare @a int,@error int declare @temp varchar(50) set @a=1 --申明游标为Uid declare order_cursor cursor for (select [Uid] from Student) --打开游标-- open order_cursor --开始循环游标变量-- fetch next from order_cursor into @temp while @@FETCH_STATUS = 0 --返回被 FETCH语句执行的最后游标的状态-- begin update Student set Age=20+@a,demo=@a where Uid=@temp set @a=@a+1 fetch next from order_cursor into @temp --转到下一个游标 end close order_cursor --关闭游标 deallocate order_cursor --释放游标 end go
二、日期函数
日期函数可以操作datetime 与smalldatetime类型的值。有些函数可用于解析日期值
的日期与实际部分,有些函数可用于比较、操纵日期、时间值。
日期数据类型的区别如下表:
1、DATEADD()函数
DATEADD()函数用于日期/时间值上加上日期单位间隔。该函数返回值的类型是datetime类型
比如,要得到2017年4月29日起30天后的日期,可以使用一下语句
select DATEADD(DAY,30,‘2017-04-29‘)
查询结果
2017-05-29 00:00:00.000
1)DATEADD()函数的时间间隔参数
2)DATEADD()函数的使用
--18年后的日期-- select DATEADD(YEAR,18,‘2000-03-12‘) --返回:2018-03-12 00:00:00.000 --3年前的日期-- select DATEADD(YEAR,-3,‘2000-03-12‘) --返回:1997-03-12 00:00:00.000 --2个月后日期-- select DATEADD(MONTH,2,‘2000-03-12‘) --返回:2000-05-12 00:00:00.000 --3天后日期-- select DATEADD(DAY,3,‘2000-03-12‘) --返回:2000-03-15 00:00:00.000 --65秒后日期-- select DATEADD(SECOND,65,‘2000-03-12‘) --返回:2000-03-12 00:01:05.000 --CONVERT()和DATEADD()组合使用-- select CONVERT(varchar(20),DATEADD(Day,12,‘2000-03-12‘),120) --返回:2000-03-24 00:00:00
2、DATEDIFF()函数
DATEADD()和DATEDIFF()函数可以看作一对表兄弟,有点像乘法与除法。在等式的两端有四个元素:起始日期、时间间隔(datepart)、
差值和最终日期。如果DATEADD()函数中使用起始日期、一个整型值和一个时间间隔,就可返工最终日期值。如果提供了起始日期、时间间隔、
最终日期,DATEDIFF()函数就可以返回差值。
1)DATEDIFF()函数简单使用
------DATEDIFF()函数使用-------- --两个日期间隔的年数-- select DATEDIFF(YEAR,‘2008-08-12‘,‘2016-08-12‘) --返回:8 --两个日期间隔的月数-- select DATEDIFF(MONTH,‘2008-08-12‘,‘2016-08-12‘) --返回:96 --两个日期间隔的天数-- select DATEDIFF(DAY,‘2008-08-12‘,‘2016-08-12‘) --返回:2922
3、DATAPARY() 与DATENAME() 函数
这两个函数用于返回datetime或shortdatetime值得日期部分。DatePart()函数返回一个整型值,DateName()返回一个字符串。
1)DATAPARY() 与DATENAME() 函数使用
------DATEPART()和DATANAME()函数使用-------- --返回指定日期的月份-- select DATEPART(MONTH,‘2008-04-05‘) --返回:4 --返回指定日期的天数-- select DATEPART(DAY,‘2008-04-05‘) --返回:5 --返回指定日期的小时-- select DATEPART(HOUR,‘2008-04-05 13:23:45‘) --返回:13 --返回指定日期的月份-- select DATENAME(MONTH,‘2008-04-05‘) --返回:04 --返回指定日期的天数-- select DATENAME(DAY,‘2008-04-05‘) --返回:05 --返回指定日期的小时-- select DATENAME(HOUR,‘2008-04-05 13:23:45‘) --返回:13
4、GETDATE() 与 GETUTCDATE() 函数
这两个函数都用于返回datetime类型的当前日期与时间。GETUTCDATE()函数使用服务器上的时区设置来求出UTC时间,
这和格林威治标准时间或飞行员所说的"祖鲁时"(Zulu Time)是一样的。两个函数都能精确到3.33毫秒
1)GETDATE() 与 GETUTCDATE() 函数使用
-----GETDATE()和GETUTCDATE()函数------ --获取当前日期-- select GETDATE() --返回:2017-01-10 11:38:10.953 --获取UTC日期--- select GETUTCDATE() --返回:2017-01-10 03:38:10.950 --计算这两个日期的相差多少小时-- select DATEDIFF(HOUR,GETDATE(),GETUTCDATE()) --返回:-8
5、SYSDATETIME()函数与SYSUTCDATETIME()函数
这两个SQL Server 2008函数等价于GETDATE()和GETUTCDATE()函数,但不是返回datetime数据类型的结果,而是返回
SQL Server 2008新的datetime2数据类型的结果,该数据类型可以精确到100纳秒,当然这取决于服务器安装的硬件。
1)SYSDATETIME()函数与SYSUTCDATETIME()函数使用
-------SYSDATETIME()和SYSUTCDATETIME()函数------ --获取系统当前日期--- select SYSDATETIME() --返回:2017-01-10 11:47:14.5151856 --获取UTC日期-- select SYSUTCDATETIME() --返回:2017-01-10 03:48:31.1383882 --计算这两个日期的相差多少小时-- select DATEDIFF(HOUR,SYSDATETIME(),SYSUTCDATETIME()) --返回:-8
Sql server函数的学习2(游标函数、日期函数、字符串操纵函数)
原文:http://www.cnblogs.com/xielong/p/6268839.html