|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
如果WHERE子句的查询条件里使用比较操作符LIKE和REGEXP,MySQL只有在搜索模板的第一个字符不是通配符的情况下才能使用索引。比如说,如果查询条件是LIKEabc%‘,MySQL将使用索引;如果查询条件是LIKE%abc’,MySQL将不使用索引。server
正在进修SQLServer希冀搜集一些罕见的SqlServer成绩
SqlServer成绩择要
1.兼并多少个表?
形貌:创建一个新表,其字段布局是其他多少个表Join今后的了局。
办理思绪:select*into新表名from旧表1名,旧表2名,……
实例:
--表NewTableName的字段为表titles和titleauthor字段表相加;
---纪录为纪录为select*fromtitles,titleauthor的纪录
select*intoNewTableNamefromtitles,titleauthor
--表NewTableName的字段[title_id,title,au_id]
--纪录为selecta.title_id,a.title,b.au_idfromtitlesa,titleauthorbwherea.title_id=b.title_id
selecta.title_id,a.title,b.au_idintoNewTableNamefromtitlesa,titleauthorbwherea.title_id=b.title_id
2.查询N-M笔记录?
形貌:要从纪录会合掏出两头一段纪录来(如:取10条中的第3-8条)
办理思绪:
1.有关头字或确保独一的候选关头字字段:
办法1:从第n笔记录入手下手取m-n+1条数据
办法2:升序取前m笔记录最为a,再降序从a中取m-n+1笔记录作为b
2.没有上述字段:
增添一个自增字段天生一个一时表,在从一时表中取纪录[Where自增字段名>n-1]
实例:--
--取第4到第7笔记录[对1办法一]
SELECTtop4*FROMjobsWHEREjob_idnotin(SELECTtop3job_idFROMjobs)
--[办法二]
SELECTtop4*FROM
(SELECTtop4*FROM
(SELECTtop7*FROMjobsORDERBYjob_idASC)a
ORDERBYjob_idDESC
)b
ORDERBYjob_idASC
--取第2到第3笔记录[对1办法一]
selectIDENTITY(int,1,1)asiid,*into#temptablefromdiscountsselecttop2*from#temptablewhereiid>=2
3.按年度季度统计汇总?
形貌:统计表employee的各年度各季度的雇仆人数
办理思绪:Groupby和[函数datepart()]
实例:
//季度:quarter
SELECTyear(hire_date)年度,datepart(q,hire_date)季度,count(emp_id)雇仆人数FROMemployee
GROUPBYyear(hire_date),datepart(q,hire_date)
ORDERBY年度,季度
4.随机取n笔记录?
形貌:从表中随机提取n笔记录
办理思绪:依照用Guid
实例:
--从表中随机取5笔记录
SELECTtop5*FROMtitlesORDERBYnewid()
5.求出恣意工夫地点季度的天数?
形貌:如题
办理思绪:注重闰年
实例:
declare@tsmalldatetime
select@t=2001-4-1
selectcasedatepart(quarter,@t)
when1then
(casewhen(year(@t)%4=0andyear(@t)%1000)oryear(@t)%400=0then91else90end)
when2then91
when3then92
when4then92
end
6.求出恣意工夫的季度的第一天?
形貌:如题
办理思绪:以下
实例:
--[思绪:把日期向前推到季度的第一个月确当前号
--注重:5月31号不会推成4月31号,体系主动转为30号
declare@ddatetime
set@d=2003-5-31
select@das指定日期,
dateadd(month,-(month(@d)-1)%3,@d)-day(dateadd(month,-(month(@d)-1)%3,@d))+1as季度的第一天
--[思绪:分离求出年代日在转为日期型]
declare@tsmalldatetime
select@t=2001-9-30
selectcast(cast(year(@t)asvarchar)+-+cast(3*datepart(q,@t)-2asvarchar)+-1asdatetime)
--求以后的日期季度的第一天
selectcast(cast(year(getdate())asvarchar)+-+cast(3*datepart(q,getdate())-2asvarchar)+-1asdatetime)
7.工夫堆叠度的成绩?
出处:http://expert.csdn.net/Expert/topic/2806/2806966.xml?temp=.5277979
形貌:
createtable#a(idintidentity(1,1),date1datetime,date2datetime)
insert#aselect2004-02-2916:45:00,2004-02-2920:45:00
unionallselect2004-02-2918:45:00,2004-02-2922:45:00
unionallselect2004-03-0110:45:00,2004-03-0113:45:00
unionallselect2004-03-0113:45:00,2004-03-0116:45:00
unionallselect2004-03-0113:47:00,2004-03-0114:25:00
unionallselect2004-03-0116:45:00,2004-03-0119:15:00
unionallselect2004-03-0117:45:00,2004-03-0118:55:00
unionallselect2004-03-0118:45:00,2004-03-0121:45:00
select*from#a
我如今要找出工夫上堆叠凌驾1个小时的一切纪录!
好比第1、2条:一个是从16:45---20:45,第二条是从18:45---22:45工夫上堆叠了2个小时,以是这两条都要掏出,别的的也是一样的划定规矩!
date2-date1小于1小时的不必思索,如第5条。能够先删除该条,纪录是按date1排序的!
以是终极的了局要为:
iddate1date2
-----------------------------------------------------------------
12004-02-2916:45:00.0002004-02-2920:45:00.000
22004-02-2918:45:00.0002004-02-2922:45:00.000
62004-03-0116:45:00.0002004-03-0119:15:00.000
72004-03-0117:45:00.0002004-03-0118:55:00.000
办理思绪:
实例:
--计划一:[“victorycyz(中海,干活往了,不在CSDN玩。)”]
selectdistincta.*
from#aa,#ab
wherea.idb.idand
a.date1<b.date2anda.date2>b.date1and
(casewhena.date2>b.date2thenb.date2elsea.date2end)-
(casewhena.date1>b.date1thena.date1elseb.date1end)>1/24.0
--计划二:[“j9988(j9988)”]
select*from#aAwhere
exists(select1from#a
whereidA.id
anddateadd(minute,60,date1)<date2
and(date1betweenA.date1andA.date2)
andabs(datediff(minute,date1,A.date2))>=60)
or
exists(select1
from#a
whereidA.id
anddateadd(minute,60,A.date1)<A.date2
and(A.date1betweendate1anddate2)
andabs(datediff(minute,A.date1,date2))>=60)
收拾中
先说DDL的分类。有一类DDL,是不需要重建表的,比如加非聚簇索引。这类操作其实不会丢数据,也是在原表上直接操作,对于我们“以恢复数据为目的”的闪回,是可以先忽略的。另外一类,则是会影响到表数据的操作。 |
|