首页 > 数据库技术 > 详细

Sql server函数的学习2(游标函数、日期函数、字符串操纵函数)

时间:2017-01-10 13:28:45      阅读:187      评论:0      收藏:0      [点我收藏+]

一、游标函数与变量

  游标可以处理多行数据,在过程循环中一次访问一行。和基于集合的高效操作相比,这个功能对系统资源的消耗更大。

可以用一个函数和两个全局变量来管理游标操作

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!