濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > SQL查詢語(yǔ)句通配符與ACCESS模糊查詢like的解決方法

SQL查詢語(yǔ)句通配符與ACCESS模糊查詢like的解決方法

熱門標(biāo)簽:世界地圖標(biāo)注了哪些城市 濟(jì)源電銷外呼系統(tǒng)線路 梧州市地圖標(biāo)注 java外呼系統(tǒng)是什么 石家莊慧營(yíng)銷外呼系統(tǒng) 創(chuàng)意電話機(jī)器人 武穴地圖標(biāo)注 外呼線路批發(fā) 地圖標(biāo)注陽(yáng)江

ACCESS的通配符和SQL SERVER的通配符比較
===================================================
ACCESS庫(kù)的通配符為:
  與任何個(gè)數(shù)的字符匹配
  與任何單個(gè)字母的字符匹配

SQL Server中的通配符為:
% 與任何個(gè)數(shù)的字符匹配
_ 與單個(gè)字符匹配
正文
我今天在寫個(gè)頁(yè)面的時(shí)候,也很郁悶,表中明明有記錄,但在ASP里就是搜索不到,理論的sql語(yǔ)句如下:
Select * FROM t_food Where t_food.name like '*蘋果*'
去GOOGLE搜搜發(fā)現(xiàn),ASP中模糊查詢要這樣寫:
Select * FROM t_food Where t_food.name like '%%蘋果%%'

必須是“%”,而且要兩個(gè)。大家多注意。

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

SQL查詢語(yǔ)句通配符問(wèn)題

在Access中用SQL語(yǔ)句進(jìn)行數(shù)據(jù)查詢時(shí),用了通配符*進(jìn)行查詢。語(yǔ)句如下:

Select * from normal where bookname like '*h*'

在Access的SQL視圖中試驗(yàn)沒(méi)有任何問(wèn)題,工作一切正常。于是將SQL語(yǔ)句寫入到C#程序中,結(jié)果一到查詢語(yǔ)句時(shí)就出錯(cuò)跳出,百思不得其解。于是查找Access幫助文件,找到如下幫助:

////////////////////////////////////////////////////////////

將字符串表達(dá)式與 SQL 表達(dá)式中的模式進(jìn)行比較。

語(yǔ)法
expression Like "pattern"

Like 運(yùn)算符語(yǔ)法包含以下部分:

部分說(shuō)明
expression 在 Where 子句中使用的 SQL 表達(dá)式。
pattern 與 expression 進(jìn)行比較的字符串文字。


說(shuō)明
可以通過(guò) Like 運(yùn)算符來(lái)查找與所指定的模式相匹配的字段值。對(duì)于 pattern,可以指定完整的值(例如 Like "Smith"),也可以使用通配符來(lái)查找某個(gè)范圍內(nèi)的值(例如 Like "Sm*")。

在表達(dá)式中,可以使用 Like 運(yùn)算符來(lái)比較字段值與字符串。例如,如果在 SQL 查詢中輸入 Like "C*",那么該查詢將返回所有以字母 C 開頭的字段值。在參數(shù)查詢中,可以提示用戶鍵入要搜索的模式。

下面的示例返回以字母 P 開頭并且后面為 A 到 F 之間任何字母以及三個(gè)數(shù)字的數(shù)據(jù):

Like "P[A-F]###"

下表展示了如何通過(guò) Like 來(lái)測(cè)試不同模式的表達(dá)式。


匹配類型
模式匹配
(返回 True)不匹配
(返回 False)
多個(gè)字符 a*a aa, aBa, aBBBa aBC
   *ab* abc, AABB, Xab aZb, bac
特殊字符 a
a a*a aaa
多個(gè)字符 ab* abcdefg, abc cab, aab
單個(gè)字符 a?a aaa, a3a, aBa aBBBa
單個(gè)數(shù)字 a#a a0a, a1a, a2a aaa, a10a
字符范圍 [a-z] f, p, j 2,
范圍之外 [!a-z] 9, , % b, a
非數(shù)字值 [!0-9] A, a, , ~ 0, 1, 9
復(fù)合值 a[!b-m]# An9, az0, a99 abc, aj0


參考地址:http://office.microsoft.com/zh-cn/assistance/HP010322532052.aspx

///////////////////////////////////////////////////////////

幫助都這么寫了,沒(méi)有任何問(wèn)題啊,到底問(wèn)題是出在哪里呢?更加讓本人迷惑。后來(lái)問(wèn)了一下同事說(shuō):你的SQL語(yǔ)句錯(cuò)了,通配符應(yīng)該用%,而不是*??墒菐椭锩嬲f(shuō)的是*,而且我在Access中試驗(yàn)一切正常,同事也說(shuō)不上個(gè)所以然來(lái),于是繼續(xù)查找?guī)椭枨蟠鸢?。在另一個(gè)幫助文件中找到了如下信息:

///////////////////////////////////////////////////////////

內(nèi)置的模式匹配方法提供了一個(gè)用于字符串比較的通用工具。下表中展示了可以用于 Like 運(yùn)算符的通配符,以及與它們匹配的數(shù)字和字符串。

pattern 中的字符expression 中的匹配項(xiàng)
? 或 _(下劃線) 任何單個(gè)字符
* 或 % 零個(gè)或多個(gè)字符
# 任何單個(gè)數(shù)字 (0— 9)
[charlist] 在 charlist 中的任何單個(gè)字符。
[!charlist] 不在 charlist 中的任何單個(gè)字符。


可以使用一組由中括號(hào) ([]) 括住的一個(gè)或多個(gè)字符(charlist)來(lái)匹配在 expression 中的任何單個(gè)字符,并且 charlist 可以包含大部分 ANSI 字符集中的字符,包括數(shù)字在內(nèi)??梢酝ㄟ^(guò)將特定字符如左方括號(hào) ([)、問(wèn)號(hào) (?)、數(shù)字號(hào) (#) 和星號(hào) (*) 包含于方括號(hào)內(nèi)來(lái)直接與這些符號(hào)自身進(jìn)行匹配。不能將右方括號(hào)用在一個(gè)組中以匹配它自身,但可以將它作為單個(gè)字符用于組外。

除了括在方括號(hào)中的簡(jiǎn)單字符列表外,charlist 可以通過(guò)使用連字符號(hào) (-) 來(lái)分隔范圍的上界和下界。例如,在 pattern 中使用 [A-Z] 時(shí),如果 expression 中相應(yīng)的字符包含了任何在 A 到 Z 范圍之間的大寫字符,就能實(shí)現(xiàn)匹配??梢栽诜嚼ㄌ?hào)中包含多個(gè)范圍而不必為范圍劃界。例如,[a-zA-Z0-9] 可以匹配任何字母數(shù)字字符。

請(qǐng)注意,ANSI SQL 通配符 (%) 和 (_) 僅在 Microsoft? Jet 4.X 版本和 Microsoft OLE DB Provider for Jet 中才是有效的。如果用在 Microsoft Access 或 DAO 中,那么它們被視為文本。

其他重要的用于模式匹配的規(guī)則如下所示:

在 charlist 的開頭使用感嘆號(hào) (!) 將表示如果在 charlist 以外的任何字符出現(xiàn)在 expression 中,則發(fā)生匹配。當(dāng)它用在方括號(hào)的外面時(shí),感嘆號(hào)匹配它自身。
可以將連字符號(hào) (-) 用于 charlist 的開頭(感嘆號(hào)之后)或末尾以匹配它自身。在其他任何位置中,連字符號(hào)標(biāo)識(shí)一個(gè) ANSI 字符范圍。
指定了一個(gè)字符范圍時(shí),字符必須以升序排列出現(xiàn)(A-Z 或 0-100)。[A-Z] 是有效的模式,[Z-A] 是無(wú)效模式。
忽略字符順序 [ ];它被視為一個(gè)零長(zhǎng)度字符 ("")。
參考地址:http://office.microsoft.com/zh-cn/assistance/HP010322842052.aspx

///////////////////////////////////////////////////////////////

至此,原因總算是找到了,由于本人在Access中使用通配符*一切正常,換成%則不能成功。而C#中則只是支持%通配符,而換成*則會(huì)出錯(cuò)!這個(gè)問(wèn)題算不算是一個(gè)兼容性問(wèn)題呢?


通配符:

通配符 描述 示例
% 包含零個(gè)或更多字符的任意字符串。 Where title LIKE '%computer%' 將查找處于書名任意位置的包含單詞 computer 的所有書名。
_(下劃線) 任何單個(gè)字符。 Where au_fname LIKE '_ean' 將查找以 ean 結(jié)尾的所有 4 個(gè)字母的名字(Dean、Sean 等)。
[ ] 指定范圍 ([a-f]) 或集合 ([abcdef]) 中的任何單個(gè)字符。 Where au_lname LIKE '[C-P]arsen' 將查找以arsen 結(jié)尾且以介于 C 與 P 之間的任何單個(gè)字符開始的作者姓氏,例如,Carsen、Larsen、Karsen 等。
[^] 不屬于指定范圍 ([a-f]) 或集合 ([abcdef]) 的任何單個(gè)字符。 Where au_lname LIKE 'de[^l]%' 將查找以 de 開始且其后的字母不為 l 的所有作者的姓氏。

將通配符作為文字使用

可以將通配符模式匹配字符串用作文字字符串,方法是將通配符放在括號(hào)中。下表顯示了使用 LIKE 關(guān)鍵字和 [ ] 通配符的示例。

符號(hào) 含義
LIKE '5[%]' 5%
LIKE '[_]n' _n
LIKE '[a-cdf]' a、b、c、d 或 f
LIKE '[-acdf]' -、a、c、d 或 f
LIKE '[ [ ]' [
LIKE ']' ]
LIKE 'abc[_]d%' abc_d 和 abc_de
LIKE 'abc[def]' abcd、abce 和 abcf

使用 ESCAPE 子句的模式匹配

可搜索包含一個(gè)或多個(gè)特殊通配符的字符串。例如,customers 數(shù)據(jù)庫(kù)中的 discounts 表可能存儲(chǔ)含百分號(hào) (%) 的折扣值。若要搜索作為字符而不是通配符的百分號(hào),必須提供 ESCAPE 關(guān)鍵字和轉(zhuǎn)義符。例如,一個(gè)樣本數(shù)據(jù)庫(kù)包含名為 comment 的列,該列含文本 30%。若要搜索在 comment 列中的任何位置包含字符串 30% 的任何行,請(qǐng)指定由 Where comment LIKE '%30!%%' ESCAPE '!' 組成的 Where 子句。如果不指定 ESCAPE 和轉(zhuǎn)義符,SQL Server 將返回所有含字符串 30 的行。

下例說(shuō)明如何在 pubs 數(shù)據(jù)庫(kù) titles 表的 notes 列中搜索字符串"50% off when 100 or more copies are purchased":

Select notes FROM titles Where notes LIKE '50%% off when 100 or more copies are purchased' ESCAPE '%'

您可能感興趣的文章:
  • oracle sql語(yǔ)言模糊查詢--通配符like的使用教程詳解
  • 淺談MySQL模糊查詢中通配符的轉(zhuǎn)義
  • MYSQL必知必會(huì)讀書筆記第八章之使用通配符進(jìn)行過(guò)濾
  • SQL Server中通配符的使用示例
  • 在MySQL中使用通配符時(shí)應(yīng)該注意的問(wèn)題
  • MySql like模糊查詢通配符使用詳細(xì)介紹
  • mysql正則表達(dá)式 LIKE 通配符
  • 詳解SQL 通配符

標(biāo)簽:甘南 淮北 唐山 迪慶 滁州 揭陽(yáng) 南寧 來(lái)賓

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《SQL查詢語(yǔ)句通配符與ACCESS模糊查詢like的解決方法》,本文關(guān)鍵詞  SQL,查詢,語(yǔ)句,通配符,與,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《SQL查詢語(yǔ)句通配符與ACCESS模糊查詢like的解決方法》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于SQL查詢語(yǔ)句通配符與ACCESS模糊查詢like的解決方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    红原县| 孟连| 兴业县| 鄂托克旗| 潜山县| 偃师市| 方山县| 靖州| 金平| 安丘市| 武胜县| 澄迈县| 廉江市| 梓潼县| 镇远县| 林周县| 罗平县| 武山县| 高州市| 遂溪县| 岳西县| 南和县| 尼木县| 栖霞市| 仙居县| 泸水县| 公主岭市| 工布江达县| 罗甸县| 和田县| 垦利县| 元朗区| 杭锦后旗| 兴城市| 华容县| 澄迈县| 大名县| 凌海市| 溧阳市| 齐齐哈尔市| 涪陵区|