今天把我刚开始接触sql的简单事例总结了一下,全是从以前收藏的帖子翻出来的,供初学者来学习,希望能有所帮助,有空会继续总结
事例一:排序
ORDER BY子句可包括未出现在此选择列表的项目.然而,如果指定SELECT DISTINCT,则排序列必定出现在选择列表中.
错误的语句:SELECT DISTINCT 书名 FROM tb_BookStore ORDER BY 现存数量
正确的语句:SELECT DISTINCT (书名),现存数量 FROM tb_BookStore ORDER BY 现存数量
(2)
gold是等级 expire_date是到期时间
根据前面的查询是按等级后再按到期时间,这样的话高等级的过期的人就在低等级没过期的人的前面.
现在要做成 过期的都要到后面显示 无论等级是多少 而没过期的还是正常按等级及到期时间排列
Create Table #TEST
(ID Int,
gold Int,
expire_date DateTime)
Insert #TEST Select 1,2, '2006-06-30 '
Union All Select 2,3, '2006-06-30 '
Union All Select 3,5, '2006-05-30 '
Union All Select 4,6, '2006-06-12 '
Union All Select 5,10, '2006-07-30 '
Union All Select 6,1, '2006-08-30 '
Union All Select 6,1, '2008-08-30 '
Union All Select 6,1, '2009-08-30 '
select top 100 * from [#TEST] order by (Case When expire_date> =GetDate() Then 0 Else 1 End), gold desc,expire_date desc
事例2:charindex
B=(1,11,2,22,3)
select * from table where
charindex( ',1, ', ', '+B+ ', ')> 0 or charindex( ',2, ', ', '+B+ ', ')> 0
or charindex( ',3, ', ', '+B+ ', ')> 0
(2)
INSERT @t SELECT '消费电子 '
UNION ALL SELECT '消费电子 '
UNION ALL SELECT ',消费电子, '
select * from @t where nkey= '消费电子 '
/*-- 结果
id nkey
----------- ----------
1 消费电子
2 消费电子
--*/
select *, ', '+ '消费电子 '+ ', ' from @t where charindex( ', '+ '消费电子 '+ ', ', ', '+nkey+ ', ')> 0
/*-- 结果
id nkey
----------- ---------- ----------
1 消费电子 ,消费电子,
3 ,消费电子, ,消费电子,
(2 行受影响)
--*/
select * from @t where ', '+ '消费电子 '+ ', '= ', '+nkey+ ', '
/*-- 结果
id nkey
----------- ----------
1 消费电子
(1 行受影响)
--*/
charindex( ', '+ '消费电子 '+ ', ', ', '+nkey+ ', ')> 0
这个是包含关系
', '+ '消费电子 '+ ', '= ', '+nkey+ ', '
这个是完全匹配关系.
事例3:replace
REPLACE ( 'string_expression1 ' , 'string_expression2 ' , 'string_expression3 ' )
示例
下例用 xxx 替换 abcdefghi 中的字符串 cde。
SELECT REPLACE( 'abcdefghicde ', 'cde ', 'xxx ')
GO
下面是结果集:
------------
abxxxfghixxx
(1 row(s) affected)
事例4:case when
CASE 具有两种格式:
(1)简单 CASE 函数将某个表达式与一组简单表达式进行比较以确定结果。
(2)CASE 搜索函数计算一组布尔表达式以确定结果。两种格式都支持可选的 ELSE 参数。
语法
简单 CASE 函数:
CASE input_expression
WHEN when_expression THEN result_expression
[ ...n ]
[
ELSE else_result_expression
END
CASE 搜索函数:
select case StatusValue
when '0 ' then (select top 1 字段名 from work)
when '1 ' then (select top 1 字段名 from Notice)
end
from CommonStatusDict
create table tb(id int ,class varchar)--class种类就只有三种,如果不固定就需要存储过程来实现
insert tb
select 1, 'a ' union all
select 1, 'a ' union all
select 1, 'b ' union all
select 1, 'c ' union all
select 2, 'a ' union all
select 2, 'b ' union all
select 2, 'b '
select * from tb
想查找出按id分组得到的 a ,b ,c 的数量
如下
id a b c
1 2 1 1
2 1 2 0
select
id,
a=sum(case class when 'a ' then 1 else 0 end),
b=sum(case class when 'b ' then 1 else 0 end),
c=sum(case class when 'c ' then 1 else 0 end)
from
tb
group by
id
事例5:datediff
要查询9 月份的数据中的任意时间段,可能是一个月的,也可能是1日到15日的
select * from tabname where datediff(month,colname, '2006-09-01 ')=0
事例6:convert
SQL中CONVERT转化函数的用法
SQL中CONVERT转化函数的用法
CONVERT的使用方法:
////////////////////////////////////////////////////////////////////////////////////////
格式:
CONVERT(data_type,expression[,style])
说明:
此样式一般在时间类型(datetime,smalldatetime)与字符串类型(nchar,nvarchar,char,varchar)
相互转换的时候才用到.
例子:
SELECT CONVERT(varchar(30),getdate(),101) now
结果为
now
---------------------------------------
09/15/2001
/////////////////////////////////////////////////////////////////////////////////////
style数字在转换时间时的含义如下
-------------------------------------------------------------
Style(2位表示年份) | Style(4位表示年份) | 输入输出格式
-------------------------------------------------------------
- | 0 or 100 | mon dd yyyy hh:miAM(或PM)
-------------------------------------------------------------
1 | 101 | mm/dd/yy
-------------------------------------------------------------
2 | 102 | yy-mm-dd
-------------------------------------------------------------
3 | 103 | dd/mm/yy
-------------------------------------------------------------
4 | 104 | dd-mm-yy
-------------------------------------------------------------
5 | 105 | dd-mm-yy
-------------------------------------------------------------
6 | 106 | dd mon yy
-------------------------------------------------------------
7 | 107 | mon dd,yy
-------------------------------------------------------------
8 | 108 | hh:mm:ss
-------------------------------------------------------------
- | 9 or 109 | mon dd yyyy hh:mi:ss:mmmmAM(或PM)
-------------------------------------------------------------
10 | 110 | mm-dd-yy
-------------------------------------------------------------
11 | 111 | yy/mm/dd
-------------------------------------------------------------
12 | 112 | yymmdd
-------------------------------------------------------------
- | 13 or 113 | dd mon yyyy hh:mi:ss:mmm(24小时制)
-------------------------------------------------------------
14 | 114 | hh:mi:ss:mmm(24小时制)
-------------------------------------------------------------
- | 20 or 120 | yyyy-mm-dd hh:mi:ss(24小时制)
-------------------------------------------------------------
- | 21 or 121 | yyyy-mm-dd hh:mi:ss:mmm(24小时制)
例如当前时间为:2005-9-12 13:20:00
我要取其中的:2005-9-12
select convert(char(10), '2005-9-12 13:20:00 ',120)
[解决办法]
沙發
[解决办法]
LZ好人~不错~学习 UP!!
[解决办法]
再UP!!
[解决办法]
楼主辛苦了!
[解决办法]
楼主辛苦,多总结,多温故才能知新,呵呵
[解决办法]
整理的有点乱
LZ继续努力
[解决办法]
学习~!
谢谢楼主 ~!
[解决办法]
楼主辛苦!
貌似和偶同岁HOHO
[解决办法]
楼主辛苦!
好人一個
[解决办法]
好人啊
[解决办法]
加油~~~
[解决办法]
:)
先占個位置
[解决办法]
感谢
[解决办法]
LZ辛苦了
[解决办法]
谢谢楼主,先收藏了
[解决办法]
学习
[解决办法]
收藏先
[解决办法]
楼主是好人..好人一生平安
JF
[解决办法]
路过...学习.
[解决办法]
支持下
[解决办法]
学习
[解决办法]
那个什么 Union 我觉得 好象不太用到啊!
呵呵!
支持!
[解决办法]
^_^
[解决办法]
学习
[解决办法]
学习
[解决办法]
学习中 up
[解决办法]
支持下
[解决办法]
只剩板凳了,也不错
[解决办法]
先谢谢楼主。再搬个板凳慢慢看,学习无止尽!
[解决办法]
学习
[解决办法]
学习
[解决办法]
顶一下!!!
[解决办法]
太好拉.谢谢.
[解决办法]
慢慢看,不懂再问。学习先。
[解决办法]
楼主费心了。。谢谢。。
[解决办法]
都是经验啊
[解决办法]
辛苦了
[解决办法]
lz辛苦~
[解决办法]
学习
[解决办法]
楼主懂得累积啊~学习……
[解决办法]
好帖
[解决办法]
jf
[解决办法]
不错,值得借鉴
[解决办法]
学习……
[解决办法]
mark
[解决办法]
顶,怎么没游标?
[解决办法]
学习……
[解决办法]
学习,占个坑位
[解决办法]
学习
[解决办法]
学习
[解决办法]
学习
[解决办法]
:)
[解决办法]
拿分..飘过~~~
[解决办法]
谢谢,我在这里还想问下,以上的简单事件发生的原因。如果能给个为什么那就更加好了,再次感谢
[解决办法]
学习....
[解决办法]
向lz致敬。
辛苦了。
[解决办法]
谢谢
[解决办法]
具有开源精神的好人啊
[解决办法]
学习拉,谢谢。。。
[解决办法]
lz辛苦了 :)
[解决办法]
mark
感谢分享
[解决办法]
下学期学习刚好用到,多谢!!!
[解决办法]
学习
[解决办法]
谢谢LZ,不过感觉不仅只是对初学者有用.
[解决办法]
平常遇到的问题收集起来到以后学习很有帮助的,温故而知新。
[解决办法]
搂主幸苦了
[解决办法]
搂主幸苦了
------解决方案--------------------
不错
[解决办法]
很不错哦!
[解决办法]
mark,谢谢!!
[解决办法]
好东西 收藏
[解决办法]
嵌套游标的使用
declare cur1 cursor for
select ... from table_name1 where ...group by / order by ...
open cur1
FETCH NEXT FROM cur1 INTO ...
while (@@FETCH_STATUS = 0 )
begin
....
declare cur2 cursor for
select ... from table_name2 where ...group by / order by ...
set @sql= 'select ... from table_name2 where ...group by / order by ... '
exec @sql
open cur2
FETCH NEXT FROM cur2 INTO ...
while (@@FETCH_STATUS = 0 )
begin
....
FETCH NEXT FROM cur2 INTO ...
end
....
close cur2
DEALLOCATE cur2
FETCH NEXT FROM cur1 INTO ...
end
close cur1
deallocate cur1
[解决办法]
温故知新
[解决办法]
谢谢
[解决办法]
感谢!!!
[解决办法]
ths
[解决办法]
顶 学习中
[解决办法]
学习中,很有帮助。辛苦了,谢谢
[解决办法]
我是新手我喜欢。学好了帮助大家。
[解决办法]
好帖,一定要收藏。。。共享
[解决办法]
好东西 赞一个
[解决办法]
mark再慢慢看。。。。。。。
[解决办法]
不错,值得收藏!
[解决办法]
mark 收藏
[解决办法]
88
[解决办法]
为虾米没置顶?
[解决办法]
学习
[解决办法]
ding~~~好东西
[解决办法]
学习~ ^o^
[解决办法]
好多,看不过来了~
[解决办法]
mark
[解决办法]
感谢楼主,最好写成一个文档,发给大家共同学习,我的邮箱long5973@163.com
[解决办法]
你太好了 希望多来几个你这样的 老大们加油啊 我们等你们发贴呢
------解决方案--------------------
好心人啊!!少见了!!
学习
3Q lz!!!
[解决办法]
好东西要顶上去~让大家一起分享
[解决办法]
dingdingdingdingdingdingdingding