首頁 資料庫 mysql教程 SQL資料運算基礎(中級)9

SQL資料運算基礎(中級)9

Dec 17, 2016 pm 02:38 PM

轉換資料

SQL Sever足夠強大,可以在需要的時候把大部分數值從一種類型轉換為另一種類型。例如,要比較SMALLINT型和INT型資料的大小,你不需要進行明確的型別轉換。 SQL Sever會為你完成這項工作。但是,當你想在字符型資料和其它類型的資料之間進行轉換時,你的確需要自己進行轉換操作。例如,假設你想要從一個MONEY型欄位中取出所有的值,並在結果後面加上字串「US Dollars」。你需要使用函數CONVERT(),如下例所示:

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

函數CONVERT()帶有兩個變數。第一個變數指定了資料類型和長度。第二個變數指定了要轉換的欄位。在這個範例中,字段price被轉換成長度為8個字元的CHAR型欄位。字段price要轉換成字元型,才可以在它後面連接上字串’US Dollars’。

當向BIT型,DATETIME型,INT型,或NUMERIC型欄位加入字串時,你需要進行同樣的轉換操作。例如,下面的語句在一個SELECT語句的查詢結果中加入字串’The vote is’,該SELECT語句傳回一個BIT型欄位的值:

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

下面是這個語句的結果範例:

The vote is 1

The vote is 1

The vote is 0

(3 row(s) affected)

如果你不進行顯式的轉換,你會收到如下的錯誤訊息:

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

Use the CONVERT function to run this query.

操作字串資料

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

符合通配符

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

假如有一個訪客想從這個目錄中得到其描述中包含關鍵字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!的網站不會被回傳。

要把一個字串與另一個字串的一部分相匹配,你需要使用通配符。你使用通配符和關鍵字LIKE來實現模式匹配。下面的語句使用通配符和關鍵字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的字串都被匹配。

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

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

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

SELECT site_name FROM site_directory

WHERE site_name LIKE ‘[N-Z]%’

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

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

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

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

透過在括號內的表達式中同時包含一個範圍和一些指定的字符,你可以把這兩種方法結合起來。例如,用下面的這個查詢,你可以取出那些首字母在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的網站則不會被回傳。與通配符’%’不同,底線只代表單一字元。

注意:

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

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

匹配發音

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

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

SELECT site_name FROM site_directory

WHERE DIFFERENCE(site_name , ‘Microsoft’>3

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

例如,上面的語句會傳回網站名稱Microsoft和Macrosoft。這兩個名字的發音與Microsoft都很相似。如果你把上一語句中的大於3改為大於2,那麼名為Zicrosoft和Megasoft的網站也會被回傳。最後,如果你只需要差別等級大於1即可,則名為Picosoft和Minisoft的網站也會被比對。

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

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

這個語句選取字段site_name的所有資料及其音標碼。以下是這個查詢的結果:

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的音標碼只有第一個字母不同。你也可以發現Microsoft和Macrosoft的音標碼完全相同。

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

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

刪除空格

有兩個函數,TTRIM()和LTRIM(),可以用來從字串中剪掉空格。函數LTRIM()移除應該字串前面的所有空格;函數RTRIM()去除一個字串尾部的所有空格。這裡有一個任何使用函數RTRIM()的範例:

SELECT RTRIM(site_name) FROM site_directory

在這個例子中,如果任何一個站點的名字尾部有多餘的空格,多餘的空格將從查詢結果中刪除。

你可以巢狀使用這兩個函數,把一個字串前後的空格同時刪除:

SELECT LTRIM(RTRIM(site_name) FROM site_directory

你會發現,在從CHAR型欄位中剪掉多餘的空格時,這兩個函數非常有用。記住,如果你把字串儲存在CHAR型欄位中,該字串會被追加多餘的空格,以符合該欄位的長度。用這兩個函數,你可以去掉無用的空格,從而解決這個問題。

 以上就是SQL資料操作基礎(中級)9的內容,更多相關文章請關注PHP中文網(www.php.cn)!


本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1665
14
CakePHP 教程
1424
52
Laravel 教程
1322
25
PHP教程
1270
29
C# 教程
1250
24
Hibernate 框架中 HQL 和 SQL 的差異是什麼? Hibernate 框架中 HQL 和 SQL 的差異是什麼? Apr 17, 2024 pm 02:57 PM

HQL和SQL在Hibernate框架中進行比較:HQL(1.物件導向語法,2.資料庫無關的查詢,3.類型安全),而SQL直接操作資料庫(1.與資料庫無關的標準,2.可執行複雜查詢和資料操作)。

Oracle SQL中除法運算的用法 Oracle SQL中除法運算的用法 Mar 10, 2024 pm 03:06 PM

《OracleSQL中除法運算的用法》在OracleSQL中,除法運算是常見的數學運算之一。在資料查詢和處理過程中,除法運算可以幫助我們計算欄位之間的比例或得出特定數值的邏輯關係。本文將介紹OracleSQL中除法運算的用法,並提供具體的程式碼範例。一、OracleSQL中除法運算的兩種方式在OracleSQL中,除法運算可以用兩種不同的方式來進行

Oracle與DB2的SQL語法比較與區別 Oracle與DB2的SQL語法比較與區別 Mar 11, 2024 pm 12:09 PM

Oracle和DB2是兩個常用的關聯式資料庫管理系統,它們都有自己獨特的SQL語法和特性。本文將針對Oracle和DB2的SQL語法進行比較與區別,並提供具體的程式碼範例。資料庫連接在Oracle中,使用以下語句連接資料庫:CONNECTusername/password@database而在DB2中,連接資料庫的語句如下:CONNECTTOdataba

詳解MyBatis動態SQL標籤中的Set標籤功能 詳解MyBatis動態SQL標籤中的Set標籤功能 Feb 26, 2024 pm 07:48 PM

MyBatis動態SQL標籤解讀:Set標籤用法詳解MyBatis是一個優秀的持久層框架,它提供了豐富的動態SQL標籤,可以靈活地建構資料庫操作語句。其中,Set標籤是用來產生UPDATE語句中SET子句的標籤,在更新作業中非常常用。本文將詳細解讀MyBatis中Set標籤的用法,以及透過具體的程式碼範例來示範其功能。什麼是Set標籤Set標籤用於MyBati

SQL中的identity屬性是什麼意思? SQL中的identity屬性是什麼意思? Feb 19, 2024 am 11:24 AM

SQL中的Identity是什麼,需要具體程式碼範例在SQL中,Identity是一種用於產生自增數字的特殊資料類型,它常用於唯一識別表中的每一行資料。 Identity欄位通常與主鍵列搭配使用,可確保每筆記錄都有獨一無二的識別碼。本文將詳細介紹Identity的使用方式以及一些實際的程式碼範例。 Identity的基本使用方式在建立表格時,可以使用Identit

如何使用 PHP 實作批次處理和資料批次操作 如何使用 PHP 實作批次處理和資料批次操作 Sep 06, 2023 am 10:46 AM

如何使用PHP實現批次處理和資料批量操作在開發Web應用程式過程中,經常會遇到需要同時處理多個資料的情況。為了提高效率和減少資料庫請求的次數,我們可以使用PHP來實現批次處理和資料批量操作。本文將介紹如何使用PHP來實現這些功能,並附加程式碼範例以供參考。批次處理資料當需要對大量資料進行相同的操作時,可以使用PHP的循環結構來進行批次處理。

SQL出現5120錯誤怎麼解決 SQL出現5120錯誤怎麼解決 Mar 06, 2024 pm 04:33 PM

解決方法:1、檢查登入使用者是否具有足夠的權限來存取或操作該資料庫,確保該使用者俱有正確的權限;2、檢查SQL Server服務的帳戶是否具有存取指定檔案或資料夾的權限,確保該帳戶具有足夠的權限來讀取和寫入該文件或資料夾;3、檢查指定的資料庫文件是否已被其他進程打開或鎖定,嘗試關閉或釋放該文件,並重新運行查詢;4、嘗試以管理員身份運行Management Studio等等。

如何使用SQL語句在MySQL中進行資料聚合和統計? 如何使用SQL語句在MySQL中進行資料聚合和統計? Dec 17, 2023 am 08:41 AM

如何使用SQL語句在MySQL中進行資料聚合和統計?在進行資料分析和統計時,資料聚合和統計是非常重要的步驟。 MySQL作為一個功能強大的關聯式資料庫管理系統,提供了豐富的聚合和統計函數,可以很方便地進行資料聚合和統計操作。本文將介紹使用SQL語句在MySQL中進行資料聚合和統計的方法,並提供具體的程式碼範例。一、使用COUNT函數進行計數COUNT函數是最常用

See all articles