?? 11-4-3.cfm.htm
字號:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>操作字符串數據</title>
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
</head>
<body>
<font FACE="宋體"><b>
<p ALIGN="JUSTIFY">操作字符串數據</p>
</b></font><font FACE="宋體" SIZE="3">
<p ALIGN="JUSTIFY">SQL Sever有許多函數和表達式,使你能對字符串進行有趣的操作,包括各種各樣的模式匹配和字符轉換。在這一節中,你將學習如何使用最重要的字符函數和表達式。</p>
</font><font FACE="宋體"><b>
<p ALIGN="JUSTIFY">匹配通配符</p>
</b></font><font FACE="宋體" SIZE="3">
<p ALIGN="JUSTIFY">假設你想建立一個與Yahoo功能相似的Internet目錄。你可以建立一個表用來保存一系列的站點名稱,統一資源定位器(URL),描述,和類別,并允許訪問者通過在HTML
form中輸入關鍵字來檢索這些內容。</p>
<p ALIGN="JUSTIFY">假如有一個訪問者想從這個目錄中得到其描述中包含關鍵字trading
card的站點的列表。要取出正確的站點列表,你也許試圖使用這樣的查詢:</p>
<p ALIGN="JUSTIFY">SELECT site_name FROM site_directory WHERE site_desc=</font><font
SIZE="3">’</font><font FACE="宋體" SIZE="3">trading card</font><font SIZE="3">’</p>
</font><font FACE="宋體" SIZE="3">
<p ALIGN="JUSTIFY">這個查詢可以工作。但是,它只能返回那些其描述中只有trading
card這個字符串的站點。例如,一個描述為We have the greatest collection of
trading cards in the world!的站點不會被返回。</p>
<p ALIGN="JUSTIFY">要把一個字符串與另一個字符串的一部分相匹配,你需要使用通配符。你使用通配符和關鍵字LIKE來實現模式匹配。下面的語句使用通配符和關鍵字LIKE重寫了上面的查詢,以返回所有正確站點的名字:</p>
<p ALIGN="JUSTIFY">SELECT SITE_name FROM site_directory </p>
<p ALIGN="JUSTIFY">WHERE site_desc LIKE </font><font SIZE="3">‘</font><font
FACE="宋體" SIZE="3">%trading cark%</font><font SIZE="3">’</p>
</font><font FACE="宋體" SIZE="3">
<p ALIGN="JUSTIFY">在這個例子中,所有其描述中包含表達式trading card的站點都被返回。描述為We
have the greatest collection of trading cards in the world!的站點也被返回。當然,如果一個站點的描述中包含I
am trading cardboard boxes online ,該站點的名字也被返回。</p>
<p ALIGN="JUSTIFY">注意本例中百分號的使用。百分號是通配符的例子之一。它代表0個或多個字符。通過把trading
card括在百分號中,所有其中嵌有字符串trading card的字符串都被匹配。</p>
<p ALIGN="JUSTIFY">現在,假設你的站點目錄變得太大而不能在一頁中完全顯示。你決定把目錄分成兩部分。在第一頁,你想顯示所有首字母在A到M之間的站點。在第二頁,你想顯示所有首字母在N到Z之間的站點。要得到第一頁的站點列表,你可以使用如下的SQL語句:</p>
<p ALIGN="JUSTIFY">SELECT site_name FROM site_directory WHERE site_name LIKE </font><font
SIZE="3">‘</font><font FACE="宋體" SIZE="3">[A-M]%</font><font SIZE="3">’</p>
</font><font FACE="宋體" SIZE="3">
<p ALIGN="JUSTIFY">在這個例子中使用了表達式[A-M],只取出那些首字母在A到M之間的站點。中括號([])用來匹配處在指定范圍內的單個字符。要得到第二頁中顯示的站點,應使用這個語句:</p>
<p ALIGN="JUSTIFY">SELECT site_name FROM site_directory</p>
<p ALIGN="JUSTIFY">WHERE site_name LIKE </font><font SIZE="3">‘</font><font
FACE="宋體" SIZE="3">[N-Z]%</font><font SIZE="3">’</p>
</font><font FACE="宋體" SIZE="3">
<p ALIGN="JUSTIFY">在這個例子中,括號中的表達式代表任何處在N到Z之間的單個字符。</p>
<p ALIGN="JUSTIFY">假設你的站點目錄變得更大了,你現在需要把目錄分成更多頁。如果你想顯示那些以A,B或C開頭的站點,你可以用下面的查詢來實現:</p>
<p ALIGN="JUSTIFY">SELECT site_name FROM site_directory WHERE site_name LIKE </font><font
SIZE="3">‘</font><font FACE="宋體" SIZE="3">[ABC]%</font><font SIZE="3">’</p>
</font><font FACE="宋體" SIZE="3">
<p ALIGN="JUSTIFY">在這個例子中,括號中的表達式不再指定一個范圍,而是給出了一些字符。任何一個其名字以這些字符中的任一個開頭的站點都將被返回。</p>
<p ALIGN="JUSTIFY">通過在括號內的表達式中同時包含一個范圍和一些指定的字符,你可以把這兩種方法結合起來。例如,用下面的這個查詢,你可以取出那些首字母在C到F之間,或者以字母Y開頭的站點:</p>
<p ALIGN="JUSTIFY">SELECT site_name FROM site_directory WHERE site_name LIKE </font><font
SIZE="3">‘</font><font FACE="宋體" SIZE="3">[C-FY]%</font><font SIZE="3">’</p>
</font><font FACE="宋體" SIZE="3">
<p ALIGN="JUSTIFY">在這個例子中,名字為Collegescape和Yahoo的站點會被選取,而名字為Magicw3的站點則不會被選取。</p>
<p ALIGN="JUSTIFY">你也可以使用脫字符(^)來排除特定的字符。例如,要得到那些名字不以Y開頭的站點,你可以使用如下的查詢:</p>
<p ALIGN="JUSTIFY">SELECT site_name FROM site_directory WHERE site_name LIKE </font><font
SIZE="3">‘</font><font FACE="宋體" SIZE="3">[^Y]%</font><font SIZE="3">’</p>
</font><font FACE="宋體" SIZE="3">
<p ALIGN="JUSTIFY">對給定的字符或字符范圍均可以使用脫字符。</p>
<p ALIGN="JUSTIFY">最后,通過使用下劃線字符(_),你可以匹配任何單個字符。例如,下面這個查詢返回每一個其名字的第二個字符為任何字母的站點:</p>
<p ALIGN="JUSTIFY">SELECT site_name FROM site_directory WHERE site_name LIKE </font><font
SIZE="3">‘</font><font FACE="宋體" SIZE="3">M_crosoft</font><font SIZE="3">’</p>
</font><font FACE="宋體" SIZE="3">
<p ALIGN="JUSTIFY">這個例子既返回名為Microsoft的站點,也返回名為Macrosoft的站點。但是,名字為Moocrosoft的站點則不被返回。與通配符</font><font
SIZE="3">’</font><font FACE="宋體" SIZE="3">%</font><font SIZE="3">’</font><font
FACE="宋體" SIZE="3">不同,下劃線只代表單個字符。</p>
<p ALIGN="JUSTIFY">注意</p>
<p ALIGN="JUSTIFY">如果你想匹配百分號或下劃線字符本身,你需要把它們括在方括號中。如果你想匹配連字符(-),應把它指定為方括號中的第一個字符。如果你想匹配方括號,應把它們也括在方括號中。例如,下面的語句返回所有其描述中包含百分號的站點:</p>
<p ALIGN="JUSTIFY">SELECT site_name FROM site_directory WHERE site_desc LIKE </font><font
SIZE="3">‘</font><font FACE="宋體" SIZE="3">%[%]%</font><font SIZE="3">’</p>
</font><font FACE="宋體"><b>
<p ALIGN="JUSTIFY">匹配發音</p>
</b></font><font FACE="宋體" SIZE="3">
<p ALIGN="JUSTIFY">Microsoft SQL
有兩個允許你按照發音來匹配字符串的函數。函數SOUNDEX()給一個字符串分配一個音標碼,函數DIFFERENCE()按照發音比較兩個字符串。當你不知道一個名字的確切拼寫,但多少知道一點它的發音時,使用這兩個函數將有助于你取出該記錄。</p>
<p ALIGN="JUSTIFY">例如,如果你建立一個Internet目錄,你也許想增加一個選項,允許訪問者按照站點名的發音來搜索站點,而不是按名字的拼寫。考慮如下的語句:</p>
<p ALIGN="JUSTIFY">SELECT site_name FROM site_directory </p>
<p ALIGN="JUSTIFY">WHERE DIFFERENCE(site_name , </font><font SIZE="3">‘</font><font
FACE="宋體" SIZE="3">Microsoft</font><font SIZE="3">’</font><font FACE="宋體"
SIZE="3">>3</p>
<p ALIGN="JUSTIFY">這個語句使用函數DEFFERENCE()來取得其名字的發音與Microsoft非常相似的站點。函數DIFFERENCE()返回一個0到4之間的數字。如果該函數返回4,表示發音非常相近;如果該函數返回0,說明這兩個字符串的發音相差很大。</p>
<p ALIGN="JUSTIFY">例如,上面的語句將返回站點名Microsoft和Macrosoft。這兩個名字的發音與Microsoft都很相似。如果你把上一語句中的大于3改為大于2,那么名為Zicrosoft和Megasoft的站點也將被返回。最后,如果你只需要差別等級大于1即可,則名為Picosoft和Minisoft的站點也將被匹配。</p>
<p ALIGN="JUSTIFY">要深入了解函數DIFFERENCE()是如何工作的,你可以用函數SOUNDEX()來返回函數DIFFERENCE()所使用的音標碼。這里有一個例子:</p>
<p ALIGN="JUSTIFY">SELECT site_name </font><font SIZE="3">‘</font><font FACE="宋體"
SIZE="3">site name</font><font SIZE="3">’</font><font FACE="宋體" SIZE="3">,SOUNDEX(site_name)
</font><font SIZE="3">‘</font><font FACE="宋體" SIZE="3">sounds like</font><font
SIZE="3">’</p>
</font><font FACE="宋體" SIZE="3">
<p ALIGN="JUSTIFY">這個語句選取字段site_name的所有數據及其音標碼。下面是這個查詢的結果:</p>
<p ALIGN="JUSTIFY">site name sounds like</p>
</font><font SIZE="3">
<p ALIGN="JUSTIFY">……………………………………………………………….</p>
<p ALIGN="JUSTIFY">Yahoo Y000</p>
<p ALIGN="JUSTIFY">Mahoo M000</p>
<p ALIGN="JUSTIFY">Microsoft M262</p>
<p ALIGN="JUSTIFY">Macrosoft M262</p>
<p ALIGN="JUSTIFY">Minisoft M521</p>
<p ALIGN="JUSTIFY">Microshoft M262</p>
<p ALIGN="JUSTIFY">Zicrosoft Z262</p>
<p ALIGN="JUSTIFY">Zaposoft Z121</p>
<p ALIGN="JUSTIFY">Millisoft M421</p>
<p ALIGN="JUSTIFY">Nanosoft N521</p>
<p ALIGN="JUSTIFY">Megasoft M221</p>
<p ALIGN="JUSTIFY">Picosoft P221</p>
<p ALIGN="JUSTIFY">(12 row(s) affected)</p>
</font><font FACE="宋體" SIZE="3">
<p ALIGN="JUSTIFY">如果你仔細看一下音標碼,你會注意到音標碼的第一個字母與字段值的第一個字母相同。例如,Yahoo和Mahoo的音標碼只有第一個字母不同。你還可以發現Microsoft和Macrosoft的音標碼完全相同。</p>
<p ALIGN="JUSTIFY">函數DIFFERENDE()比較兩個字符串的第一個字母和所有的輔音字母。該函數忽略任何元音字母(包括y),除非一個元音字母是一個字符串的第一個字母。</p>
<p ALIGN="JUSTIFY">不幸的是,使用SOUNDEX()和DIFFERENCE()有一個欠缺。WHERE子句中包含這兩個函數的查詢執行起來效果不好。因此,你應該小心使用這兩個函數。</p>
</font>
</body>
</html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -