- 相關(guān)推薦
數(shù)據(jù)庫(kù)管理系統(tǒng)中的模糊查詢技術(shù)
內(nèi)容提要 主要介紹在數(shù)據(jù)庫(kù)管理系統(tǒng)中實(shí)現(xiàn)模糊查詢的方法與技巧,提供了能實(shí)現(xiàn)真正模糊查詢的二個(gè)通用函數(shù)的源程序,特別是介紹了結(jié)構(gòu)化查詢語(yǔ)言SQL中鮮為人知的通配符的使用方法。
關(guān)鍵詞 FoxPro 模糊查詢 SELECT-SQL 通配符
在數(shù)據(jù)庫(kù)管理系統(tǒng)中,查詢是一個(gè)很重要的內(nèi)容。然而,在多數(shù)情況下人們不能準(zhǔn)確知道作為查詢條件的字段內(nèi)容,如:某字段內(nèi)容為“涪陵師范高等?茖W(xué)!,查詢者可能只知道其簡(jiǎn)稱“涪陵師!被颉案煂!,這時(shí),為保證能查到滿足條件的數(shù)據(jù)記錄,只能進(jìn)行模糊查詢。下面從編程的角度談?wù)勗贔oxPro 2.5b中,實(shí)現(xiàn)模糊查詢的方法。
一、 簡(jiǎn)單的模糊查詢方法
① 利用比較操作符“=”進(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.)?梢姡@種方法的模糊性是不能令人滿意的。
② 利用“$”進(jìn)行包含比較,其模糊查詢的效果就比用“=”時(shí)好得多。這種方法是在“$”右邊的字符表達(dá)式中查找“$”左邊的字符表達(dá)式,若找到返回邏輯真(.T.),否則返回邏輯假(.F.)。用這種方法只要“$”左邊的字符表達(dá)式的每一個(gè)字符在“$”右邊的字符表達(dá)式中存在且位置不間斷,查找就能成功,然而對(duì)于諸如前面提到的“涪陵師!被颉案煂!敝惖暮(jiǎn)稱,其查找結(jié)果為邏輯假(.F.)。
由此可見,直接利用“=”和“$”進(jìn)行比較操作是不能太“模糊”的。
二、查詢條件為縮略語(yǔ)或簡(jiǎn)稱的模糊查詢方法
縮略語(yǔ)或簡(jiǎn)稱在地名、單位名稱中使用非常廣泛。通常,縮略語(yǔ)或簡(jiǎn)稱是由全稱中的某些排列位置不連續(xù)的字符組成的,因此,通過設(shè)置不同長(zhǎng)度的字符串進(jìn)行比較的規(guī)則,或者利用包含比較符“$”,是不能對(duì)縮略語(yǔ)或簡(jiǎn)稱進(jìn)行模糊查詢的。這時(shí)可編寫一通用的自定義函數(shù),將用戶輸入的查詢條件(<字符串2>)與字符型字段變量(<字符串1>)進(jìn)行逐字比較,如果<字符串2>是<字符串1>的縮略語(yǔ)或簡(jiǎn)稱,則返回邏輯真(.T.)否則返回邏輯假(.F.),從而實(shí)現(xiàn)模糊查詢。
下面將作者所編寫的自定義函數(shù)介紹給讀者,以供參考。
設(shè)計(jì)思想:此函數(shù)必須是一個(gè)通用函數(shù)。為此,執(zhí)行時(shí)可先接受二個(gè)參數(shù)──<字符串1>和<字符串2>。從<字符串2>的左邊開始取其第一、二個(gè)字符X1,用AT( )函數(shù)測(cè)試X1在<字符串1>中的位置S1,如果S1不為0,就將<字符串1>中包含X1以及左邊部分的字符截掉,并取<字符串2>中的第三、四個(gè)字符X2,用AT( )函數(shù)測(cè)試X2在<字符串1>的剩余部分中的位置S2,若S2不為0,就將<字符串1>的剩余部分中包含X2以及左邊部分的字符截掉……,直到將<字符串2>中的字符取完并在<字符串1>中測(cè)試完為止,最后本函數(shù)返回邏輯真(.T.)。在這個(gè)過程中只要有一次測(cè)試不成功(即Sn=0),則退出本函數(shù)并返回邏輯假(.F.)。因?yàn)橐粋(gè)漢字占二個(gè)ASCII字符,所以每次取二個(gè)相鄰字符進(jìn)行測(cè)試(讓ZFBJ.PRG中的K=2)。這樣做,一是可以減少測(cè)試比較的次數(shù),提高程序運(yùn)行速度。二是當(dāng)<字符串2>中含有數(shù)字、字母等半角字符時(shí),可以減少滿足條件的記錄數(shù)目,提高查詢的命中率。然而,若查詢條件中含有英文縮寫,則每次只能取一個(gè)ASCII字符進(jìn)行測(cè)試(讓ZFBJ.PRG中的K=1)。
本函數(shù)的源程序如下:
*************************************************************
* 程序名稱:ZF
[1] [2] [3]
【數(shù)據(jù)庫(kù)管理系統(tǒng)中的模糊查詢技術(shù)】相關(guān)文章:
動(dòng)態(tài)分段技術(shù)在公交查詢系統(tǒng)中的應(yīng)用04-28
河流系統(tǒng)水質(zhì)管理模糊優(yōu)化模型04-25
基于MapObject組件的安全生產(chǎn)監(jiān)督管理系統(tǒng)信息查詢技術(shù)04-30
系統(tǒng)模糊優(yōu)選理論在投資項(xiàng)目決策中的應(yīng)用04-28
基于GIS的基礎(chǔ)數(shù)據(jù)庫(kù)管理系統(tǒng)04-29
路面管理系統(tǒng)中的預(yù)防性養(yǎng)護(hù)技術(shù)05-02
帶模糊參數(shù)的系統(tǒng)模糊可靠度分析04-30
在成本預(yù)算管理中難得模糊的論文04-27