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的佔位符爲_,,不過必須將_符合字段存儲的長度一樣纔可以準確搜索出字段。



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