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