麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 數(shù)據(jù)庫 > SQL Server > 正文

SQL數(shù)據(jù)操作基礎(chǔ)(中級)9

2019-11-03 08:38:05
字體:
供稿:網(wǎng)友
轉(zhuǎn)換數(shù)據(jù)

SQL Sever足夠強大,可以在需要的時候把大部分數(shù)值從一種類型轉(zhuǎn)換為另一種類型。例如,要比較SMALLINT型和INT型數(shù)據(jù)的大小,你不需要進行顯式的類型轉(zhuǎn)換。SQL Sever會為你完成這項工作。但是,當你想在字符型數(shù)據(jù)和其它類型的數(shù)據(jù)之間進行轉(zhuǎn)換時,你的確需要自己進行轉(zhuǎn)換操作。例如,假設(shè)你想從一個MONEY型字段中取出所有的值,并在結(jié)果后面加上字符串“US Dollars”。你需要使用函數(shù)CONVERT(),如下例所示:

SELECT CONVERT(CHAR(8),PRice)+’US Dollars’ FROM orders

函數(shù)CONVERT()帶有兩個變量。第一個變量指定了數(shù)據(jù)類型和長度。第二個變量指定了要進行轉(zhuǎn)換的字段。在這個例子中,字段price被轉(zhuǎn)換成長度為8個字符的CHAR型字段。字段price要被轉(zhuǎn)換成字符型,才可以在它后面連接上字符串’US Dollars’。

當向BIT型,DATETIME型,INT型,或者NUMERIC型字段添加字符串時,你需要進行同樣的轉(zhuǎn)換操作。例如,下面的語句在一個SELECT語句的查詢結(jié)果中加入字符串’The vote is’,該SELECT語句返回一個BIT型字段的值:

SELECT ‘The vote is’+CONVERT(CHAR(1),vote) FROM opinion

下面是這個語句的結(jié)果示例:

The vote is 1

The vote is 1

The vote is 0

(3 row(s) affected)

如果你不進行顯式的轉(zhuǎn)換,你會收到如下的錯誤信息:

Implicit conversion from datatype ‘varchar’ to ‘bit’ is not allowec.

Use the CONVERT function to run this query.

操作字符串數(shù)據(jù)

SQL Sever有許多函數(shù)和表達式,使你能對字符串進行有趣的操作,包括各種各樣的模式匹配和字符轉(zhuǎn)換。在這一節(jié)中,你將學習如何使用最重要的字符函數(shù)和表達式。

匹配通配符

假設(shè)你想建立一個與Yahoo功能相似的Internet目錄。你可以建立一個表用來保存一系列的站點名稱,統(tǒng)一資源定位器(URL),描述,和類別,并允許訪問者通過在HTML form中輸入關(guān)鍵字來檢索這些內(nèi)容。

假如有一個訪問者想從這個目錄中得到其描述中包含關(guān)鍵字trading card的站點的列表。要取出正確的站點列表,你也許試圖使用這樣的查詢:

SELECT site_name FROM site_directory WHERE site_desc=’trading card’

這個查詢可以工作。但是,它只能返回那些其描述中只有trading card這個字符串的站點。例如,一個描述為We have the greatest collection of trading cards in the world!的站點不會被返回。

要把一個字符串與另一個字符串的一部分相匹配,你需要使用通配符。你使用通配符和關(guān)鍵字LIKE來實現(xiàn)模式匹配。下面的語句使用通配符和關(guān)鍵字LIKE重寫了上面的查詢,以返回所有正確站點的名字:

SELECT SITE_name FROM site_directory

WHERE site_desc LIKE ‘%trading cark%’

在這個例子中,所有其描述中包含表達式trading card的站點都被返回。描述為We have the greatest collection of trading cards in the world!的站點也被返回。當然,如果一個站點的描述中包含I am trading cardboard boxes online ,該站點的名字也被返回。

注意本例中百分號的使用。百分號是通配符的例子之一。它代表0個或多個字符。通過把trading card括在百分號中,所有其中嵌有字符串trading card的字符串都被匹配。

現(xiàn)在,假設(shè)你的站點目錄變得太大而不能在一頁中完全顯示。你決定把目錄分成兩部分。在第一頁,你想顯示所有首字母在A到M之間的站點。在第二頁,你想顯示所有首字母在N到Z之間的站點。要得到第一頁的站點列表,你可以使用如下的SQL語句:

SELECT site_name FROM site_directory WHERE site_name LIKE ‘[A-M]%’

在這個例子中使用了表達式[A-M],只取出那些首字母在A到M之間的站點。中括號([])用來匹配處在指定范圍內(nèi)的單個字符。要得到第二頁中顯示的站點,應(yīng)使用這個語句:

SELECT site_name FROM site_directory

WHERE site_name LIKE ‘[N-Z]%’

在這個例子中,括號中的表達式代表任何處在N到Z之間的單個字符。

假設(shè)你的站點目錄變得更大了,你現(xiàn)在需要把目錄分成更多頁。如果你想顯示那些以A,B或C開頭的站點,你可以用下面的查詢來實現(xiàn):

SELECT site_name FROM site_directory WHERE site_name LIKE ‘[ABC]%’

在這個例子中,括號中的表達式不再指定一個范圍,而是給出了一些字符。任何一個其名字以這些字符中的任一個開頭的站點都將被返回。

通過在括號內(nèi)的表達式中同時包含一個范圍和一些指定的字符,你可以把這兩種方法結(jié)合起來。例如,用下面的這個查詢,你可以取出那些首字母在C到F之間,或者以字母Y開頭的站點:

SELECT site_name FROM site_directory WHERE site_name LIKE ‘[C-FY]%’

在這個例子中,名字為Collegescape和Yahoo的站點會被選取,而名字為Magicw3的站點則不會被選取。

你也可以使用脫字符(^)來排除特定的字符。例如,要得到那些名字不以Y開頭的站點,你可以使用如下的查詢:

SELECT site_name FROM site_directory WHERE site_name LIKE ‘[^Y]%’

對給定的字符或字符范圍均可以使用脫字符。

最后,通過使用下劃線字符(_),你可以匹配任何單個字符。例如,下面這個查詢返回每一個其名字的第二個字符為任何字母的站點:

SELECT site_name FROM site_directory WHERE site_name LIKE ‘M_crosoft’

這個例子既返回名為Microsoft的站點,也返回名為Macrosoft的站點。但是,名字為Moocrosoft的站點則不被返回。與通配符’%’不同,下劃線只代表單個字符。

注意:

如果你想匹配百分號或下劃線字符本身,你需要把它們括在方括號中。如果你想匹配連字符(-),應(yīng)把它指定為方括號中的第一個字符。如果你想匹配方括號,應(yīng)把它們也括在方括號中。例如,下面的語句返回所有其描述中包含百分號的站點:

SELECT site_name FROM site_directory WHERE site_desc LIKE ‘%[%]%’

匹配發(fā)音

Microsoft SQL 有兩個允許你按照發(fā)音來匹配字符串的函數(shù)。函數(shù)SOUNDEX()給一個字符串分配一個音標碼,函數(shù)DIFFERENCE()按照發(fā)音比較兩個字符串。當你不知道一個名字的確切拼寫,但多少知道一點它的發(fā)音時,使用這兩個函數(shù)將有助于你取出該記錄。

例如,如果你建立一個Internet目錄,你也許想增加一個選項,允許訪問者按照站點名的發(fā)音來搜索站點,而不是按名字的拼寫。考慮如下的語句:

SELECT site_name FROM site_directory

WHERE DIFFERENCE(site_name , ‘Microsoft’>3

這個語句使用函數(shù)DEFFERENCE()來取得其名字的發(fā)音與Microsoft非常相似的站點。函數(shù)DIFFERENCE()返回一個0到4之間的數(shù)字。如果該函數(shù)返回4,表示發(fā)音非常相近;如果該函數(shù)返回0,說明這兩個字符串的發(fā)音相差很大。

例如,上面的語句將返回站點名Microsoft和Macrosoft。這兩個名字的發(fā)音與Microsoft都很相似。如果你把上一語句中的大于3改為大于2,那么名為Zicrosoft和Megasoft的站點也將被返回。最后,如果你只需要差別等級大于1即可,則名為Picosoft和Minisoft的站點也將被匹配。

要深入了解函數(shù)DIFFERENCE()是如何工作的,你可以用函數(shù)SOUNDEX()來返回函數(shù)DIFFERENCE()所使用的音標碼。這里有一個例子:

SELECT site_name ‘site name’,SOUNDEX(site_name) ‘sounds like’

這個語句選取字段site_name的所有數(shù)據(jù)及其音標碼。下面是這個查詢的結(jié)果:

site name sounds like

……………………………………………………………….

Yahoo Y000

Mahoo M000

Microsoft M262

Macrosoft M262

Minisoft M521

Microshoft M262

Zicrosoft Z262

Zaposoft Z121

Millisoft M421

Nanosoft N521

Megasoft M221

Picosoft P221

(12 row(s) affected)

如果你仔細看一下音標碼,你會注意到音標碼的第一個字母與字段值的第一個字母相同。例如,Yahoo和Mahoo的音標碼只有第一個字母不同。你還可以發(fā)現(xiàn)Microsoft和Macrosoft的音標碼完全相同。

函數(shù)DIFFERENDE()比較兩個字符串的第一個字母和所有的輔音字母。該函數(shù)忽略任何元音字母(包括y),除非一個元音字母是一個字符串的第一個字母。

不幸的是,使用SOUNDEX()和DIFFERENCE()有一個欠缺。WHERE子句中包含這兩個函數(shù)的查詢執(zhí)行起來效果不好。因此,你應(yīng)該小心使用這兩個函數(shù)。

刪除空格

有兩個函數(shù),TTRIM()和LTRIM(),可以用來從字符串中剪掉空格。函數(shù)LTRIM()去除應(yīng)該字符串前面的所有空格;函數(shù)RTRIM()去除一個字符串尾部的所有空格。這里有一個任何使用函數(shù)RTRIM()的例子:

SELECT RTRIM(site_name) FROM site_directory

在這個例子中,如果任何一個站點的名字尾部有多余的空格,多余的空格將從查詢結(jié)果中刪去。

你可以嵌套使用這兩個函數(shù),把一個字符串前后的空格同時刪去:

SELECT LTRIM(RTRIM(site_name) FROM site_directory

你會發(fā)現(xiàn),在從CHAR型字段中剪掉多余的空格時,這兩個函數(shù)非常有用。記住,如果你把一個字符串保存在CHAR型字段中,該字符串會被追加多余的空格,以匹配該字段的長度。用這兩個函數(shù),你可以去掉無用的空格,從而解決這個問題。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 精品国产一区二区三区在线观看 | 人禽l交免费视频 | 亚洲最新色 | 欧美1—12sexvideos | 92看片淫黄大片欧美看国产片 | 欧美无限资源 | 亚洲性爰 | 91看片王 | 国产一级一区二区 | 久久国产一二三 | 一区二区免费网站 | 久久久久久久久淑女av国产精品 | 正在播放91视频 | 欧美成人精品一区二区三区 | 春光影院理论片 | 日韩精品久久久久久久九岛 | 国产二区三区四区 | 欧美不卡视频在线观看 | 久久久噜噜噜久久熟有声小说 | 福利在线免费视频 | 少妇的肉体的满足毛片 | 国产一区视频免费观看 | 久色亚洲 | 久久99精品国产99久久6男男 | 亚洲第一成人在线 | 亚洲啪啪 | 黄色男女视频 | 国产1区在线观看 | 亚洲综合精品 | 久久久久久久久日本理论电影 | 涩涩伊人 | 免费看性xxx高清视频自由 | 最新一级毛片 | 狠狠撸电影 | 成人免费观看av | 国产精品自在线拍 | 久久国产乱子伦精品 | av免费在线观看国产 | 中文字幕22页 | a视频网站 | av日韩在线免费观看 |