例子
ELECT DATEDIFF(day,'2008-12-29','2008-12-30')
結果是1
ELECT DATEDIFF(day,'2008-12-30','2008-12-29')
結果是-1
7.相同結構表去重復后進行復制
insert into 新表名select DomainInFo_FIp.D_Domain,源表名.D_ID,源表名.D_IP,源表名.stat from 源表名
inner join (select min(D_ID) D_ID,distinct(D_Domain) as D_Domain from 源表名) TempTab on 源表名.D_ID = TempTab.D_ID
復制代碼
8.一個取一張表中域名第一個“.”之前部分,并寫入另外一張表的游標實現
declare @D_Domain nvarchar(200); Declare Mycursor cursor for select D_Domain FROM dbo.DomainInFo_FIp Open Mycursor Fetch next from Mycursor into @D_Domain --開始抓數據 while @@FETCH_STATUS = 0 begin set @D_Domain=Left(@D_Domain,Charindex('.',@D_Domain)-1) if(Len(@D_Domain)>0 and @D_Domain<>'www') begin insert into dbo.DomainInFo_FIp_log (D_Domain)values(@D_Domain) end Fetch next from Mycursor into @D_Domain end Close Mycursor --關閉游標 Deallocate Mycursor --刪除游標
復制代碼
9.計算一表中某個字段的重復次數,游標實現
declare @D_Domain nvarchar(200);declare @count int; Declare Mycursor cursor for select D_Domain FROM dbo.DomainInFo_FIp_log Open Mycursor Fetch next from Mycursor into @D_Domain --開始抓數據 while @@FETCH_STATUS = 0 begin select @count=count(*) from DomainInFo_FIp_log where D_Domain=@D_Domain update DomainInFo_FIp_log set numindex=@count where D_Domain=@D_Domain Fetch next from Mycursor into @D_Domain end Close Mycursor --關閉游標 Deallocate Mycursor --刪除游標
復制代碼
10.Replace函數的使用方法
update dbo.DomainInFo_FIp set D_Domain=Replace(D_Domain,'=','')
update dbo.DomainInFo_FIp set D_Domain=Replace(D_Domain,'<','')
update dbo.DomainInFo_FIp set D_Domain=Replace(D_Domain,'-','')
update dbo.DomainInFo_FIp set D_Domain=Replace(D_Domain,'~','')
update dbo.DomainInFo_FIp set D_Domain=Replace(D_Domain,']','')
update dbo.DomainInFo_FIp set D_Domain=Replace(D_Domain,'[','')
update dbo.DomainInFo_FIp set D_Domain=Replace(D_Domain,'$','')
update dbo.DomainInFo_FIp set D_Domain=Replace(D_Domain,'{','')
update dbo.DomainInFo_FIp set D_Domain=Replace(D_Domain,'}','')
update dbo.DomainInFo_FIp set D_Domain=Replace(D_Domain,'·','')
復制代碼
11.Substring函數與Len以及Left的配合使用(字段D_Domain值第一個字符是點的就清除這個點)
update dbo.DomainInFo_FIp set D_Domain=Substring(D_Domain,2,Len(D_Domain)) where Left(D_Domain,1) ='.'
12.一個實現怎么樣查詢IP所在段的函數代碼如下
set ANSI_NULLS ONset QUOTED_IDENTIFIER ONgoALTER FUNCTION [dbo].[GetIP](@ip varchar(20)) RETURNS varchar(20) AS BEGIN declare @IPre varchar(20) SET @IPre='' select @IPre = right('00'+ParseName(@IP,4),3)+'.'+ right('00'+ParseName(@IP,3),3)+'.'+ right('00'+ParseName(@IP,2),3)+'.'+ right('00'+ParseName(@IP,1),3) RETURN @IPre END
復制代碼
如果大家想快速查詢的話我建議大家先把自己數據的IP段執行一下這個函數,然后每次查詢的時候直接轉要查詢的IP就行了,這樣速度會很快的。
例子如下:
-- =============================================-- Author:
復制代碼
大家一定不要傻的這樣寫語句
SELECT iptitle FROM Qqwry WHERE GetIP(@ip) BETWEEN ipst AND ipend
因為這樣的速度是極慢的,那是因為每一次檢查都要轉化。
在這里也提示大家在寫Sql語句時不要把函數直接寫在查詢語句內,當然 如果是必須的那就沒有辦法了只能那樣了。
13.解決數據庫正在使用無法分離的存儲過程
set ANSI_NULLS ONset QUOTED_IDENTIFIER ONgoALTER proc [dbo].[p_killspid] @dbname varchar(200) --要關閉進程的數據庫名 as declare @sql nvarchar(500) declare @spid nvarchar(20) declare #tb cursor for select spid=cast(spid as varchar(20)) from master..sysprocesses where dbid=db_id(@dbname) open #tb fetch next from #tb into @spid while @@fetch_status=0 begin exec( 'kill '+@spid) fetch next from #tb into @spid end close #tb deallocate #tb