亚洲国产日韩欧美在线a乱码,国产精品路线1路线2路线,亚洲视频一区,精品国产自,www狠狠,国产情侣激情在线视频免费看,亚洲成年网站在线观看

淺析數(shù)據(jù)庫管理系統(tǒng)中模糊查詢技術(shù)的正確使用

  • 相關(guān)推薦

淺析數(shù)據(jù)庫管理系統(tǒng)中模糊查詢技術(shù)的正確使用


   【論文關(guān)鍵詞】:數(shù)據(jù)庫;系統(tǒng);模糊查詢

   【論文摘要】:主要介紹在數(shù)據(jù)庫系統(tǒng)中實(shí)現(xiàn)模糊查詢的方法與技巧,提供了能實(shí)現(xiàn)真正模糊查詢的二個(gè)通用函數(shù)的源程序,特別是介紹了結(jié)構(gòu)化查詢SQL中鮮為人知的通配符的使用方法。
  
 
   在數(shù)據(jù)庫管理系統(tǒng)中,查詢是一個(gè)很重要的內(nèi)容。然而,在多數(shù)情況下人們不能準(zhǔn)確知道作為查詢條件的字段內(nèi)容,如:某字段內(nèi)容為"陵師范高等?茖W(xué)校",查詢者可能只知道其簡稱"陵師專"或"師專",這時(shí),為保證能查到滿足條件的數(shù)據(jù)記錄,只能進(jìn)行模糊查詢。下面從編程的角度談?wù)勗贔oxPro 2.5b中,實(shí)現(xiàn)模糊查詢的方法。
  
  一、簡單的模糊查詢方法
  
  1. 利用比較操作符"="進(jìn)行模糊查詢
  先把SET EXACT的設(shè)置置為OFF,這時(shí),"="用于兩個(gè)字符表達(dá)式之間作比較,其規(guī)則是:"="右邊的字符逐個(gè)與"="左邊相同位置的字符進(jìn)行比較,只要遇到其中一個(gè)字符不相等,或者"="右邊的字符表達(dá)式結(jié)束,比較操作就結(jié)束。所以,"abc"="abc","abc"="ab","ab_"="ab","ab"=""的比較結(jié)果均為真(.T.)。可見,這種方法的模糊性是不能令人滿意的。
  2. 利用"$"進(jìn)行包含比較,其模糊查詢的效果就比用"="時(shí)好得多
  這種方法是在"$"右邊的字符表達(dá)式中查找"$"左邊的字符表達(dá)式,若找到返回邏輯真(.T.),否則返回邏輯假(.F.)。用這種方法只要"$"左邊的字符表達(dá)式的每一個(gè)字符在"$"右邊的字符表達(dá)式中存在且位置不間斷,查找就能成功,然而對(duì)于諸如前面提到的"陵師專"或"師專"之類的簡稱,其查找結(jié)果為邏輯假(.F.)。
  由此可見,直接利用"="和"$"進(jìn)行比較操作是不能太"模糊"的。
  
  二、查詢條件為縮略語或簡稱的模糊查詢方法
  
  縮略語或簡稱在地名、單位名稱中使用非常廣泛。通常,縮略語或簡稱是由全稱中的某些排列位置不連續(xù)的字符組成的,因此,通過設(shè)置不同長度的字符串進(jìn)行比較的規(guī)則,或者利用包含比較符"$",是不能對(duì)縮略語或簡稱進(jìn)行模糊查詢的。這時(shí)可編寫一通用的自定義函數(shù),將用戶輸入的查詢條件(<字符串2>)與字符型字段變量(<字符串1>)進(jìn)行逐字比較,如果<字符串2>是<字符串1>的縮略語或簡稱,則返回邏輯真(.T.)否則返回邏輯假(.F.),從而實(shí)現(xiàn)模糊查詢。
  下面將作者所編寫的自定義函數(shù)介紹給讀者,以供參考。
  設(shè)計(jì)思想:此函數(shù)必須是一個(gè)通用函數(shù)。為此,執(zhí)行時(shí)可先接受二個(gè)參數(shù)──<字符串1>和<字符串2>。從<字符串2>的左邊開始取其第一、二個(gè)字符X1,用AT( )函數(shù)測試X1在<字符串1>中的位置S1,如果S1不為0,就將<字符串1>中包含X1以及左邊部分的字符截掉,并取<字符串2>中的第三、四個(gè)字符X2,用AT( )函數(shù)測試X2在<字符串1>的剩余部分中的位置S2,若S2不為0,就將<字符串1>的剩余部分中包含X2以及左邊部分的字符截掉……,直到將<字符串2>中的字符取完并在<字符串1>中測試完為止,最后本函數(shù)返回邏輯真(.T.)。在這個(gè)過程中只要有一次測試不成功(即Sn=0),則退出本函數(shù)并返回邏輯假(.F.)。因?yàn)橐粋(gè)漢字占二個(gè)ASCII字符,所以每次取二個(gè)相鄰字符進(jìn)行測試(讓ZFBJ.PRG中的K=2)。這樣做,一是可以減少測試比較的次數(shù),提高程序運(yùn)行速度。二是當(dāng)<字符串2>中含有數(shù)字、字母等半角字符時(shí),可以減少滿足條件的記錄數(shù)目,提高查詢的命中率。然而,若查詢條件中含有英文縮寫,則每次只能取一個(gè)ASCII字符進(jìn)行測試(讓ZFBJ.PRG中的K=1)。
  本函數(shù)的源程序如下:
  * 程序名稱:ZFBJ.PRG
  * 程序功能:比較<字符串2>是否為<字符串1>的縮略語
  * 調(diào)用格式:ZFBJ(<字符串1>,<字符串2>)
  * 通常<字符串1>是一個(gè)字符型字段變量
  * 返 回 值:值 .T. 或 .F.
  * 使用:FoxPro 2.5b
  PARAMETERS m.FIELD, m.INMC
  PRIVATE ALL
  IF (PARAMETERS( ) < 2) ;
  OR EMPTY(ALLTRIM(m.FIELD)) ;
  OR EMPTY(ALLTRIM(m.INMC))
  RETURN .F.
  ENDIF
  IF SET("TALK") = "ON"
  SET TALK OFF
  m.talkstat = "ON"
  ENDIF
  m.compstat = SET("COMPATIBLE")
  SET COMPATIBLE FOXPLUS
  J = LEN(ALLTRIM(m.INMC))
  K=2
  FOR I = 1 TO J STEP K
  m.MC = SUBSTR(ALLTRIM(m.INMC),I,K)
  MCWZ = AT(m.MC,ALLTRIM(m.FIELD))
  IF MCWZ<>0
  m.FIELD = SUBSTR(ALLTRIM(m.FIELD),MCWZ+K)
  fhz = .T.
  ELSE
  fhz = .F.
  EXIT
  ENDIF
  ENDFOR
  IF m.talkstat = "ON"
  SET TALK ON
  ENDIF
  IF m.compstat = "ON"
  SET COMPATIBLE ON
  ENDIF
  RETURN fhz
  使用舉例:設(shè)內(nèi)存變量m.field,其值為用戶輸入的用戶名稱的簡稱,如"師專",現(xiàn)在要在KTJBK.DBF中查詢用戶名稱(字段名)為"陵師范高等專科學(xué)校",或?yàn)?陵師專",或?yàn)?師專"的全部記錄,可以先將滿足條件的記錄拷貝到一臨時(shí)數(shù)據(jù)庫TEMP.DBF中,然后再瀏覽,瀏覽完畢刪除臨時(shí)數(shù)據(jù)庫TEMP.DBF。其程序如下:
  m.field="師專"
  SELECT 0
  USE KTJBK
  COPY TO TEMP.DBF FOR ZFBJ(用戶名稱,m.field)
  SELECT 0
  USE TEMP
  BROWSE NOEDIT
  USE
  DELETE FILE
  TEMP.DBF
  SELECT KTJBK
  USE
  通過上面介紹的自定義函數(shù)實(shí)現(xiàn)了真正的模糊查詢,然而令人遺憾的是它的速度表現(xiàn)總
  使人感到美中不足。幸好在FoxPro中引入了結(jié)構(gòu)化查詢SELECT-SQL。
  
    三、 利用FoxPro中SELECT-SQL語句的模糊查詢方法
  結(jié)構(gòu)化查詢語言SQL是FoxPro中值得驕傲的特色之一。利用SQL的SELECT語句,可以非常方便、極其快速地進(jìn)行十分復(fù)雜的查詢操作。特別值得推薦的是ELECT-SQL語句中的WHERE參數(shù)支持通配符"%(百分符號(hào))"和"_(下劃線符號(hào))",因此,對(duì)于查詢條件為縮略語或簡稱的情況,可以非常簡單地實(shí)現(xiàn)真正的模糊查詢。這里,百分符號(hào)"%"代表0個(gè)或0個(gè)以上的任意字符,下劃線符號(hào)"_"代表1個(gè)任意字符,它們只能與運(yùn)算符LIKE搭配使用。
  使用舉例:設(shè)內(nèi)存變量m.field,其值為用戶輸入的用戶名稱的簡稱,如"師專",現(xiàn)在要在KTJBK.DBF中查詢用戶名稱(字段名)為"陵師范高等專科學(xué)校",或?yàn)?陵師專",或?yàn)?師專"的全部記錄,可以用下面的一段程序?qū)崿F(xiàn):
  m. field="師專"
  mc_cxtj="%"
  FOR i=1 TO LEN(ALLTRIM(m.field)) STEP 2
  mc_cxtj=mc_cxtj+SUBSTR(ALLTRIM(m.field),i,2)+"%"
  ENDFOR
  SELECT * ;
  FROM KTJBK ;
  WHERE KTJBK.用戶名稱 LIKE (mc_cxtj) ;
  INTO CURSOR TEMP
  程序說明:本程序運(yùn)行時(shí),先將m.field = "師專" 中插入四個(gè)通配符"%",得到
  mc_cxtj ="%%師%專%",然后利用SQL的SELECT語句,從數(shù)據(jù)庫KTJBK.DBF中選出字段變量"用戶名稱"符合"%%師%專%"格式的所有記錄,輸出到一個(gè)虛擬臨時(shí)數(shù)據(jù)庫TEMP.DBF中。
  利用FoxPro中的結(jié)構(gòu)化查詢語言SELECT-SQL可以編寫出很漂亮的通用查詢程序。作者在數(shù)據(jù)庫系統(tǒng)的開發(fā)實(shí)踐中,曾用FoxPro的屏幕生成器編寫過一通用查詢程序,其通用性和執(zhí)行速度表現(xiàn)都非常好。

【淺析數(shù)據(jù)庫管理系統(tǒng)中模糊查詢技術(shù)的正確使用】相關(guān)文章:

淺析電子商務(wù)時(shí)代的信息管理與信息系統(tǒng)06-10

淺析《詩經(jīng)》中的鳥意象04-21

如何正確使用節(jié)拍器02-24

淺析自動(dòng)控制系統(tǒng)04-19

自動(dòng)化技術(shù)在機(jī)械設(shè)計(jì)制造中應(yīng)用淺析論文05-15

淺析貝葉斯網(wǎng)絡(luò)在自適應(yīng)超媒體系統(tǒng)中應(yīng)用研究05-29

淺析“點(diǎn)圓式”工作法在高校德育管理中的運(yùn)用05-28

淺析招貼藝術(shù)中圖形語言的特征02-28

淺析發(fā)電機(jī)內(nèi)冷水系統(tǒng)處理05-25

電力工程技術(shù)經(jīng)濟(jì)管理造價(jià)控制淺析論文05-06