全文檢索以及一些零散學習

keeking發表於2009-08-10

伺服器角色與資料庫角色的差異在與:伺服器角色的物件是伺服器,固定只有7中,不能夠增加.而資料庫角色的物件是資料庫,
除了預設的10種之外,可由管理者自行新增.


DDL:CREATE,ALTER,DROP
DML:INSERT,DELETE,UPDATE
DCL:GRANT,DENY,REVOKE,BEGIN TRAN,COMMIT TRAN,ROLLBACK TRAN

位元運運算元
包括&(and),|(or),^(Exclusive OR)

&:當兩個運算元都為1的時候,結果為1.只要有一個不是1,結果為0
|:只要有一個是1,則結果就是1.只有當兩個都是0時,結果才是0
^:只有當兩個值不一樣時,才是1,否則為0


單一運算元運運算元
總共有3種:+,-,~(補數)
 print ~1    --"-2"
print ~cast(1 as tinyint) --tinyint將數值轉換成正整數型別,是為了方便示範位元的變灰.若直接用整數,則會產生負數."254"

null值的處理

coalesce(expr1,expr2....)--從左到右計算,遇到非null即傳回

nullif(expr1,expr2)--當expr1等於expr2時,傳回null,否則傳回expr1

isnull(expr1,expr2)--當expr1等於null時,傳回expr2,否則傳回expr1

建立全文檢索目錄
開啟資料庫的全文檢索功能

use test
go

sp_fulltext_database 'enable'
go

1.要建立全文檢索索引,必須有primary key,或是具備唯一性的key才行,而且不得多個欄位組合的key
2.每個資料表只能建立一個全文檢索索引,但全文檢索索引中可包含多個欄位
3.包含在全文搜尋欄位中,只能是char,varchar,nvarchar,nchar,text,ntext,image,xml和varbinary等型別的欄位.

select * from dbo.A01 where contains(a0101,'keeking')

Z0001       a0101                a0102                a0103       a0104
----------- -------------------- -------------------- ----------- --------------------
100         keeking                                   100         19851

(1 row(s) affected)

select * from dbo.A01 where contains(a0101,'  keeking     ')---可以包含空格

Z0001       a0101                a0102                a0103       a0104
----------- -------------------- -------------------- ----------- --------------------
100         keeking                                   100         19851

(1 row(s) affected)
select * from dbo.A01 where contains(a0101,'  "keeking"     ')---可以包含空格,須以雙引號括起來

select * from dbo.A01 where contains(a0101,'  "keeking" or "林強"    ')---加上邏輯運算的搜尋條件

select * from dbo.A01 where contains(a0101,'  "keeki*"   ')---模糊查詢一定要指明首字元,如"pa*",不可以用"*pa"或"*pa*"

select * from dbo.A01 where contains(a0101,'"keeking" near "drive"') --位置相近的字串

select * from dbo.A01 where contains(a0101,'formsof (inflectional,"drive")') --衍生字
Z0001       a0101                a0102                a0103       a0104
----------- -------------------- -------------------- ----------- --------------------
200         drive                44                   44          44
500         drove                22                   22          22

(2 row(s) affected)

select * from dbo.A01 where contains(a0101 ,'isabout(keeking weight(0.1))')--給字串加權計分

select * from dbo.A01 where freetext(a0101 ,'keeking')--freetext會將句子中的單詞拆分,只要符合單詞的記錄就會搜出來.而不是按句子來.這樣比較不精確

 

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7899089/viewspace-611786/,如需轉載,請註明出處,否則將追究法律責任。

相關文章