sql 总结知识点

对于存放时间格式为2003090709:56:00

转换为datetime类型方法:CAST(   STUFF(a.cyrq,9,0,' ') AS DATETIME)   结果为 2003-09-07 09:56:00.000

 

而将标准datetime类型转换为字符型方法为:

   declare @begin DATETIME
set @begin='2003-09-07 09:56:00'
SELECT convert(varchar(8),@begin,112)+convert(varchar(8),@begin,8)  结果为  2003090709:56:00


对于存放时间格式为varchar(16)

在进行时间搜索时,是用varchar(16)转换为datetime进行搜索 还是varchar(16)不转换与将条件转换为相同的varchar类型  哪个匹配快呢?

进行了实验,随机添加日期100w条数据

  DECLARE @date_from DATETIME; --开始日期
  DECLARE @date_to DATETIME;  --结束日期
declare @temp datetime; 
declare @i int;
  SET @date_from = '2000-10-01'; 
  SET @date_to = '2011-12-30';


set @i=1


while @i<1000000
begin
set @temp= @date_from +(ABS(CAST(CAST( NewID() AS BINARY(8) )AS INT)) %CAST((@date_to - @date_from)AS INT))
 insert into tbtest SELECT @i,convert(varchar(8),@temp,112)+convert(varchar(8),@temp,8) 
  set @i=@i+1
end


进行搜索:

declare @runTime datetime
set @runTime=getdate()

select count(*) from tbtest
where CAST(   STUFF(begintime,9,0,' ') AS DATETIME) between '2000-12-23 00:00:00' and '2005-01-01 00:00:00 '


select [语句执行花费时间(毫秒)]=datediff(ms,@runTime,getdate())

结果为358344 用时3293ms


declare @runTime datetime
set @runTime=getdate()

DECLARE @date_from DATETIME; --开始日期
  DECLARE @date_to DATETIME;  --结束日期
set @date_from='2000-12-23 00:00:00'
set @date_to='2005-01-01'
select count(*) from tbtest
where begintime between convert(varchar(8),@date_from,112)+convert(varchar(8),@date_from,8) and convert(varchar(8),@date_to,112)+convert(varchar(8),@date_to,8)


select [语句执行花费时间(毫秒)]=datediff(ms,@runTime,getdate())

结果 358344  用时376ms


从而得出结果,将varchar(16)不转换与将条件转换为相同的varchar类型得到的结果快些。


经常有人写sql为

select b.item

from a,b

where a.id*=b.id   ----这样的意思为  LEFT OUTER JOIN b  也可以写为 a.id=*b.id意思为  A RIGHT OUTER JOIN b


like的占位符为_,,不过必须将_符合字段存储的长度一样才可以准确搜索出字段。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章