sql语句中的case、while等使用

CREATE TABLE [dbo].[event] (
[id] int NOT NULL IDENTITY(1,1) ,
[name] varchar(50) NULL ,
[age] int NULL ,
[createDate] datetime NULL DEFAULT (getdate()) 

)


语法

简单case函数

case input_expression 

  when when_expression  then result_expressin 

                    [...n]

                 else    else_result_expression 

                  end

example:

       select  (case age  when 11 then 'student' when 23 then 'teacher' else 'other' end) as category from event

case搜索函数:

case   whenboolean_expression  then result_expressin [...n]else else_result_expression end

example:

        SELECT (case WHEN age=11 THEN 'stu' WHEN age=22 THEN 'tea' ELSE 'other' END) AS agenum,id,age from event

在orderby中使用case          

            当查询的id值为2103695684不为空时,按照id字段排序,else按照age字段排序                  

             SELECT (case WHEN age=11 THEN 'stu' WHEN age=22 THEN 'tea' ELSE 'other' END) AS agenum,id,age   FROM event

             ORDER BY (CASE when (SELECT id from event WHERE id=2103695684) is NOT NULL THEN id ELSE age END) DESC

while的使用 while的语法while .......end

       declare @num int

       while((select count(*) from event)>1)

       begin

           set @num=(select count(*) from event)

           if(@num>12) break

           else print 'ok'

      end

    select @num


MSSQL的游标的简单使用,先看如下代码:

declare mycursor cursor for                            声明游标

select id,name from table                               游标所要索引的记录集                               

open mycursor                                                打开游标

declare @id int                                               声明一些变量用来存储当前游标索引到的记录的字段值

declare @name varchar(10)

fetch next from mycursor into @id,@name     开始移动游标到第一条记录,并且读取该记录的字段值到相应变量中

while (@@fetch_status=0)                            @@fetch_status 0表示读取记录成功,100表示读到了最后一条记录 

begin                                                              begin相当于{    所以不能省

print @id                                                         可以针对当前记录的某些字段值进行一系列SQL语句的处理

fetch next from mycursor into @id,@name     一定要在SQL语句处理后移动到下一条记录

end                                                                end相当于}  所以不能省

close mycursor                                                关闭游标

deallocate mycursor                                        释放游标



附加:


------判断两个值是否相等,相等返回空值,不等则返回第一个表达式的值----------
SELECT NULLIF(1,1)


---类型转换----
SELECT CAST(23/2 AS INTEGER)


---对时间进行增加或减少 DATEADD--
SELECT  DATEADD(MONTH, -1, GETDATE())


---用于计算两个日期之间的差额 DATEDIFF---
SELECT DATEDIFF(YEAR,GETDATE(), DATEADD(MONTH, 1, GETDATE()))




SELECT  DATENAME(YEAR, GETDATE())


----通配符的使用[str]含有str表达式中的任何一个字符[^str]不含有表达式中的任何一个字符------
SELECT  *  FROM  event  WHERE  name  LIKE '[^l]%'


还在学习中。。。。。。。。


一篇关于数据库优化的文章,大家可以参考参考http://www.cnblogs.com/hnlshzx/p/3500365.html


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值