對於存放時間格式為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的佔位符為_,,不過必須將_符合字段儲存的長度一樣才可以準確搜尋出欄位。
SQL書部分知識點總結
1.在insert語句看中不命名列的好處在於節約了輸入,並使得sql語句更短。不利之處在於,不容易看到資料屬於那一列。2.插入新資料和更新已經存在的資料之間的主要差別在於需要指明要更改哪些記錄。3.select from location 與下面的 意義相同 select locationid,st...
專案知識點總結 SQL(一)。
這次專案中,資料庫時間欄位很奇怪。日期與時間是分開的,並且是數字型別。而且時間位數不固定。可能是6位,比如 120506,12時05分06秒,又或者80806,8時08分06秒,還可能時1206,還原出來應該時001206,也就是0時12分06秒。總之時間是1到6位的。這就造成一些困難。需求是取最大...
知識點總結
1,迴圈中的中斷 continue 跳出此次迴圈,繼續for迴圈 break 跳出當前for迴圈 return 跳出當前方法 2,字串的操作 componentseparatedbystring stringbyreplacingoccurencesofstring withstring iskin...