激情欧美日韩一区二区,浪货撅高贱屁股求主人调教视频,精品无码成人片一区二区98,国产高清av在线播放,色翁荡息又大又硬又粗视频

數據庫管理系統中的模糊查詢(xún)技術(shù)

時(shí)間:2024-07-19 21:39:58 計算機畢業(yè)論文 我要投稿
  • 相關(guān)推薦

數據庫管理系統中的模糊查詢(xún)技術(shù)

內容提要 主要介紹在數據庫管理系統中實(shí)現模糊查詢(xún)的方法與技巧,提供了能實(shí)現真正模糊查詢(xún)的二個(gè)通用函數的源程序,特別是介紹了結構化查詢(xún)語(yǔ)言SQL中鮮為人知的通配符的使用方法。

關(guān)鍵詞 FoxPro 模糊查詢(xún) SELECT-SQL 通配符

在數據庫管理系統中,查詢(xún)是一個(gè)很重要的內容。然而,在多數情況下人們不能準確知道作為查詢(xún)條件的字段內容,如:某字段內容為“陵師范高等專(zhuān)科學(xué)校”,查詢(xún)者可能只知道其簡(jiǎn)稱(chēng)“陵師專(zhuān)”或“師專(zhuān)”,這時(shí),為保證能查到滿(mǎn)足條件的數據記錄,只能進(jìn)行模糊查詢(xún)。下面從編程的角度談?wù)勗贔oxPro 2.5b中,實(shí)現模糊查詢(xún)的方法。

一、 簡(jiǎn)單的模糊查詢(xún)方法

① 利用比較操作符“=”進(jìn)行模糊查詢(xún)。先把SET EXACT的設置置為OFF,這時(shí),“=”用于兩個(gè)字符表達式之間作比較,其規則是:“=”右邊的字符逐個(gè)與“=”左邊相同位置的字符進(jìn)行比較,只要遇到其中一個(gè)字符不相等,或者“=”右邊的字符表達式結束,比較操作就結束。所以,"abc"="abc","abc"="ab","ab_"="ab","ab"=""的比較結果均為邏輯真(.T.)?梢(jiàn),這種方法的模糊性是不能令人滿(mǎn)意的。

② 利用“$”進(jìn)行包含比較,其模糊查詢(xún)的效果就比用“=”時(shí)好得多。這種方法是在“$”右邊的字符表達式中查找“$”左邊的字符表達式,若找到返回邏輯真(.T.),否則返回邏輯假(.F.)。用這種方法只要“$”左邊的字符表達式的每一個(gè)字符在“$”右邊的字符表達式中存在且位置不間斷,查找就能成功,然而對于諸如前面提到的“陵師專(zhuān)”或“師專(zhuān)”之類(lèi)的簡(jiǎn)稱(chēng),其查找結果為邏輯假(.F.)。

由此可見(jiàn),直接利用“=”和“$”進(jìn)行比較操作是不能太“模糊”的。

二、查詢(xún)條件為縮略語(yǔ)或簡(jiǎn)稱(chēng)的模糊查詢(xún)方法

縮略語(yǔ)或簡(jiǎn)稱(chēng)在地名、單位名稱(chēng)中使用非常廣泛。通常,縮略語(yǔ)或簡(jiǎn)稱(chēng)是由全稱(chēng)中的某些排列位置不連續的字符組成的,因此,通過(guò)設置不同長(cháng)度的字符串進(jìn)行比較的規則,或者利用包含比較符“$”,是不能對縮略語(yǔ)或簡(jiǎn)稱(chēng)進(jìn)行模糊查詢(xún)的。這時(shí)可編寫(xiě)一通用的自定義函數,將用戶(hù)輸入的查詢(xún)條件(<字符串2>)與字符型字段變量(<字符串1>)進(jìn)行逐字比較,如果<字符串2>是<字符串1>的縮略語(yǔ)或簡(jiǎn)稱(chēng),則返回邏輯真(.T.)否則返回邏輯假(.F.),從而實(shí)現模糊查詢(xún)。

下面將作者所編寫(xiě)的自定義函數介紹給讀者,以供參考。

設計思想:此函數必須是一個(gè)通用函數。為此,執行時(shí)可先接受二個(gè)參數──<字符串1>和<字符串2>。從<字符串2>的左邊開(kāi)始取其第一、二個(gè)字符X1,用AT( )函數測試X1在<字符串1>中的位置S1,如果S1不為0,就將<字符串1>中包含X1以及左邊部分的字符截掉,并取<字符串2>中的第三、四個(gè)字符X2,用AT( )函數測試X2在<字符串1>的剩余部分中的位置S2,若S2不為0,就將<字符串1>的剩余部分中包含X2以及左邊部分的字符截掉……,直到將<字符串2>中的字符取完并在<字符串1>中測試完為止,最后本函數返回邏輯真(.T.)。在這個(gè)過(guò)程中只要有一次測試不成功(即Sn=0),則退出本函數并返回邏輯假(.F.)。因為一個(gè)漢字占二個(gè)ASCII字符,所以每次取二個(gè)相鄰字符進(jìn)行測試(讓ZFBJ.PRG中的K=2)。這樣做,一是可以減少測試比較的次數,提高程序運行速度。二是當<字符串2>中含有數字、字母等半角字符時(shí),可以減少滿(mǎn)足條件的記錄數目,提高查詢(xún)的命中率。然而,若查詢(xún)條件中含有英文縮寫(xiě),則每次只能取一個(gè)ASCII字符進(jìn)行測試(讓ZFBJ.PRG中的K=1)。

本函數的源程序如下:

* 程序名稱(chēng):ZFBJ.PRG
* 程序功能:比較<字符串2>是否為<字符串1>的縮略語(yǔ)
* 調用格式:ZFBJ(<字符串1>,<字符串2>)
* 通常<字符串1>是一個(gè)字符型字段變量
* 返 回 值:邏輯值 .T. 或 .F.
* 使用環(huán)境: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

使用舉例:設內存變量m.field,其值為用戶(hù)輸入的用戶(hù)名稱(chēng)的簡(jiǎn)稱(chēng),如“師專(zhuān)”,現在要在KTJBK.DBF中查詢(xún)用戶(hù)名稱(chēng)(字段名)為“陵師范高等專(zhuān)科學(xué)校”,或為“陵師專(zhuān)”,或為“師專(zhuān)”的全部記錄,可以先將滿(mǎn)足條件的記錄拷貝到一臨時(shí)數據庫TEMP.DBF中,然后再瀏覽,瀏覽完畢刪除臨時(shí)數據庫TEMP.DBF。其程序如下:

m.field="師專(zhuān)"
SELECT 0


USE KTJBK
COPY TO TEMP.DBF FOR ZFBJ(用戶(hù)名稱(chēng),m.field)
SELECT 0
USE TEMP
BROWSE NOEDIT
USE
DELETE FILE

TEMP.DBF
SELECT KTJBK
USE
通過(guò)上面介紹的自定義函數實(shí)現了真正的模糊查詢(xún),然而令人遺憾的是它的速度表現總使人感到美中不足。幸好在FoxPro中引入了結構化查詢(xún)語(yǔ)言SELECT-SQL。

三、 利用FoxPro中SELECT-SQL語(yǔ)句的模糊查詢(xún)方法

結構化查詢(xún)語(yǔ)言SQL是FoxPro中值得驕傲的特色之一。利用SQL的SELECT語(yǔ)句
可以非常方便、極其快速地進(jìn)行十分復雜的查詢(xún)操作。特別值得推薦的是ELECT-SQL語(yǔ)句中的WHERE參數支持通配符“%(百分符號)”和“_(下劃線(xiàn)符號)”,因此,對于查詢(xún)條件為縮略語(yǔ)或簡(jiǎn)稱(chēng)的情況,可以非常簡(jiǎn)單地實(shí)現真正的模糊查詢(xún)。這里,百分符號“%”代表0個(gè)或0個(gè)以上的任意字符,下劃線(xiàn)符號“_”代表1個(gè)任意字符,它們只能與運算符LIKE搭配使用。

使用舉例:設內存變量m.field,其值為用戶(hù)輸入的用戶(hù)名稱(chēng)的簡(jiǎn)稱(chēng),如“師專(zhuān)”,現在要在KTJBK.DBF中查詢(xún)用戶(hù)名稱(chēng)(字段名)為“陵師范高等專(zhuān)科學(xué)校”,或為“陵師專(zhuān)”,或為“師專(zhuān)”的全部記錄,可以用下面的一段程序實(shí)現:

m. field="師專(zhuān)"
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.用戶(hù)名稱(chēng) LIKE (mc_cxtj) ;
INTO CURSOR TEMP
程序說(shuō)明:本程序運行時(shí),先將m.field = "師專(zhuān)" 中插入四個(gè)通配符“%”,得到mc_cxtj ="%%師%專(zhuān)%",然后利用SQL的SELECT語(yǔ)句,從數據庫KTJBK.DBF中選出字段變量“用戶(hù)名稱(chēng)”符合“%%師%專(zhuān)%”格式的所有記錄,輸出到一個(gè)虛擬臨時(shí)數據庫TEMP.DBF中。

利用FoxPro中的結構化查詢(xún)語(yǔ)言SELECT-SQL可以編寫(xiě)出很漂亮的通用查詢(xún)程序。筆者在數據庫管理系統的開(kāi)發(fā)實(shí)踐中,曾用FoxPro的屏幕生成器編寫(xiě)過(guò)一通用查詢(xún)程序,其通用性和執行速度表現都非常好(本人愿拋磚引玉,奉獻給有興趣的《軟件世界》讀者,見(jiàn)附錄),限于篇幅這里就不詳細介紹了。

附錄:《一個(gè)真正的通用查詢(xún)程序》見(jiàn)磁盤(pán)文件TYCX.TXT(純文本文件)或
TYCX.DOC(WORD97文檔)

參考文獻:

1. 江英,楊欣 等翻譯. FoxPro 2.5 使用與參考大全,清華大學(xué)出版社,1995
2. 章立民. FoxPro 2.5 for DOS 程序設計——提高篇,人民郵電出版社,1994

【數據庫管理系統中的模糊查詢(xún)技術(shù)】相關(guān)文章:

淺析數據庫管理系統中模糊查詢(xún)技術(shù)的正確使用03-04

VB5.0中數據庫查詢(xún)模塊的實(shí)現03-03

基于Web的交互式數據庫查詢(xún)技術(shù)03-20

信息檢索中的查詢(xún)擴展技術(shù)03-07

多級存儲技術(shù)在媒體資產(chǎn)管理系統中的應用03-19

談模糊綜合評判在避孕方法咨詢(xún)系統中的應用03-18

傳輸系統中的時(shí)鐘同步技術(shù)03-18

寬帶CDMA系統中的功控技術(shù)03-21

WLAN中OFDM系統的陣列天線(xiàn)技術(shù)03-07

激情欧美日韩一区二区,浪货撅高贱屁股求主人调教视频,精品无码成人片一区二区98,国产高清av在线播放,色翁荡息又大又硬又粗视频