一、sql server在存儲過程中實現(xiàn)模糊查詢的方法
1、Wildcard操作符
Wildcard操作符:Wildcard是SQL Server支持的最基本的模糊查詢操作符,可以使用LIKE和=操作符實現(xiàn)模糊查詢。
使用LIKE操作符實現(xiàn)以“SMIT”為開頭的姓名查詢語句:
SELECT * FROM Customers WHERE LastName LIKE 'SMIT%'
使用=操作符實現(xiàn)精確匹配查詢語句:
SELECT * FROM Customers WHERE LastName = 'Smith'
2、between
把某一字段的值在特定范圍內(nèi)的記錄查詢出來:
select * from ScoreListwhere csharp between 80 and 90 --在ScoreList數(shù)據(jù)庫中查詢csharp成績在80~90之間的,列出全部列select StudentName, StudentAdress from Studentswhere Birthday between '1972-7-7' and '2022-7-7' --在Students數(shù)據(jù)庫中查詢Birthday在1972-7-7到 2022-7-7之間的,列出全部列兩項
3、in
把某一字段中內(nèi)容與所列出的查詢內(nèi)容列表匹配的記錄查詢出來:
select StudentName, StudentAdress, Age from Studentswhere Age in (21,22,23) --在Students數(shù)據(jù)庫中查詢Age是21,22,23歲的,并列出StudentName和StudentAdress,Age 三項select StudentName, StudentAdress from Studentswhere StudentAdress in ('Eric','Tom','Jack') --在Students數(shù)據(jù)庫中查詢StudentName是Eric,Tom,Jack,并列出StudentName和StudentAdress兩項
4、全文搜索
SQL Server提供了全文檢索功能,可以使用CONTAINS函數(shù)進行模糊查詢。
搜索郵件正文中包含“find me”文本的郵件:
SELECT * FROM Email WHERE CONTAINS(Body, 'find me')
5、使用存儲過程
可以使用存儲過程實現(xiàn)模糊查詢,并通過參數(shù)傳遞查詢條件。
創(chuàng)建一個存儲過程SP_FuzzySearch,根據(jù)輸入的姓名(@Name)進行模糊查詢:
CREATE PROCEDURE dbo.SP_FuzzySearch (@Name VARCHAR(50))ASBEGINSELECT *FROM CustomerWHERE Lastname LIKE '%' + @Name + '%'END
然后執(zhí)行存儲過程:
EXECUTE dbo.SP_FuzzySearch 'Smith'
二、SQL的模糊查詢通配符
1、%
表示任意0個或多個字符。一般在匹配字符串的前后都會加上%。舉例:匹配含有 “數(shù)據(jù)” 的字符串,可以用,WHERE FieldName LIKE ‘%數(shù)據(jù)%’。如果是匹配首(尾)含某個字符串的值,則用 數(shù)據(jù)%(%數(shù)據(jù))。
2、_
表示 單個 任意字符。當我們需要限制匹配的字符串的長度時,可以用 _ 替代。舉例:當需要匹配“北”開頭的兩個字符的對象時,可以用“北_”。
3、[]
羅列待匹配的單個字符。當知道要匹配的對象的范圍時,我們可以用 [] 羅列這些字符。舉例:當語句寫為:'[冬西南]瓜’,匹配的是 “冬瓜”,“西瓜”,“南瓜”字符串。'[0-4]’ 匹配的是 0,1,2,3,4。'[a-d]’ 匹配的是 a,b,c,d。對于通配符的匹配,需要在外層用 [] 括起來。
4、[^ ] 或者 [! ]
不含所羅列字符的單個字符(兩種寫法)。與第3點相反,用哪種匹配方式取決于匹配的集合哪個更小。如果匹配字符的集合小,就用 [],如果匹配的集合大,遠大于不包含集合,則用 [^ ]。舉例:語句 [^冬西南]瓜,匹配的是:甜瓜、香瓜、壞瓜、傻瓜…… 這類不含 [冬西南] 的字符。
三、sql語言的特點
1、SQL風格統(tǒng)一
SQL可以獨立完成數(shù)據(jù)庫生命周期中的全部活動,包括定義關(guān)系模式、錄入數(shù)據(jù)、建立數(shù)據(jù)庫、查詢、更新、維護、數(shù)據(jù)庫重構(gòu)、數(shù)據(jù)庫安全性控制等一系列操作,這就為數(shù)據(jù)庫應(yīng)用系統(tǒng)開發(fā)提供了良好的環(huán)境,在數(shù)據(jù)庫投入運行后,還可根據(jù)需要隨時逐步修改模式,且不影響數(shù)據(jù)庫的運行,從而使系統(tǒng)具有良好的可擴充性。
2、高度非過程化
非關(guān)系數(shù)據(jù)模型的數(shù)據(jù)操縱語言是面向過程的語言,用其完成用戶請求時,必須指定存取路徑。而用SQL進行數(shù)據(jù)操作,用戶只需提出“做什么”,而不必指明“怎么做”,因此用戶無須了解存取路徑,存取路徑的選擇以及SQL語句的操作過程由系統(tǒng)自動完成。這不但大大減輕了用戶負擔,而且有利于提高數(shù)據(jù)獨立性。
3、面向集合的操作方式
SQL采用集合操作方式,不僅查找結(jié)果可以是元組的集合,而且一次插入、刪除、更新操作的對象也可以是元組的集合。
4、以同一種語法結(jié)構(gòu)提供兩種使用方式
SQL既是自含式語言,又是嵌入式語言。作為自含式語言,它能夠獨立地用于聯(lián)機交互的使用方式,用戶可以在終端鍵盤上直接輸入SQL命令對數(shù)據(jù)庫進行操作。作為嵌入式語言,SQL語句能夠嵌入到高級語言(如C、C#、JAVA)程序中,供程序員設(shè)計程序時使用。而在兩種不同的使用方式下,SQL的語法結(jié)構(gòu)基本上是一致的。這種以統(tǒng)一的語法結(jié)構(gòu)提供兩種不同的操作方式,為用戶提供了極大的靈活性與方便性。
5、語言簡潔,易學易用
SQL功能極強,但由于設(shè)計巧妙,語言十分簡潔,完成數(shù)據(jù)定義、數(shù)據(jù)操縱、數(shù)據(jù)控制的核心功能只用了9個動詞:CREATE、ALTER、DROP、SELECT、INSERT、UPDATE、DELETE、GRANT、REVOKE。且SQL語言語法簡單,接近英語口語,因此容易學習,也容易使用。
延伸閱讀1:結(jié)構(gòu)化查詢語言
結(jié)構(gòu)化查詢語言(Structured Query Language)簡稱SQL,是一種特殊目的的編程語言,是一種數(shù)據(jù)庫查詢和程序設(shè)計語言,用于存取數(shù)據(jù)以及查詢、更新和管理關(guān)系數(shù)據(jù)庫系統(tǒng)。結(jié)構(gòu)化查詢語言是高級的非過程化編程語言,允許用戶在高層數(shù)據(jù)結(jié)構(gòu)上工作。它不要求用戶指定對數(shù)據(jù)的存放方法,也不需要用戶了解具體的數(shù)據(jù)存放方式,所以具有完全不同底層結(jié)構(gòu)的不同數(shù)據(jù)庫系統(tǒng), 可以使用相同的結(jié)構(gòu)化查詢語言作為數(shù)據(jù)輸入與管理的接口。結(jié)構(gòu)化查詢語言語句可以嵌套,這使它具有極大的靈活性和強大的功能。