1. 程式人生 > >SQL必知必會 -------- 通配符、計算字段、函數

SQL必知必會 -------- 通配符、計算字段、函數

提取 mar 第8章 column round vendor 方法 多少 頁面

1.LIKE操作符

1.1百分號(%)通配符

SELECT prod_id, prod_name FROM Products WHERE prod_name LIKE ‘Fish%

技術分享

此例子使用了搜索模式‘Fish%‘。在執行這條子句時,將檢索任意以Fish起頭的詞。%告訴DBMS接受Fish之後的任意字符,不管它有多少字符。

說明:區分大小寫
根據DBMS的不同及其配置,搜索可以是區分大小寫的。如果區分大小寫,則‘fish%‘與Fish bean bag toy就不匹配。

通配符可在搜索模式中的任意位置使用,並且可以使用多個通配符。下面的例子使用兩個通配符,它們位於模式的兩端 :


SELECT prod_id, prod_name FROM Products WHERE prod_name LIKE ‘%bean bag%‘
技術分享

需要特別註意,除了能匹配一個或多個字符外,%還能匹配0個字符。%代表搜索模式中給定位置的0個、1個或多個字符。

警告:請註意NULL
通配符%看起來像是可以匹配任何東西,但有個例外,這就是NULL。子句WHERE prod_name LIKE ‘%‘不會匹配產品名稱為NULL的行。

1.2下劃線(_)通配符

SELECT prod_id, prod_name FROM Products WHERE prod_name LIKE__ inch teddy bear‘

技術分享

下劃線的用途與%一樣,但它只匹配單個字符,而不是多個字符。

1.3方括號([])通配符

方括號([])通配符用來指定一個字符集,它必須匹配指定位置(通配符的位置)的一個字符。

說明:並不總是支持集合
與前面描述的通配符不一樣,並不是所有DBMS都支持用來創建集合的[]。只有微軟的AccessSQL Server支持集合。為確定你使用的DBMS是否支持集合,請參閱相應的文檔。

SELECT cust_contact
FROM Customers
WHERE cust_contact LIKE ‘[JM]%‘
ORDER BY cust_contact;

此通配符可以用前綴字符^(脫字號)來否定。

2.使用通配符的技巧

正如所見,SQL的通配符很有用。但這種功能是有代價的,即通配符搜索一般比前面討論的其他搜索要耗費更長的處理時間。這裏給出一些使用通配符時要記住的技巧。

  • 不要過度使用通配符。如果其他操作符能達到相同的目的,應該使用其他操作符。
  • 在確實需要使用通配符時,也盡量不要把它們用在搜索模式的開始處。把通配符置於開始處,搜索起來是最慢的。
  • 仔細註意通配符的位置。如果放錯地方,可能不會返回想要的數據。

總之,通配符是一種極其重要和有用的搜索工具,以後我們經常會用到它。

3.創建計算字段

3.1拼接字段

mysql語法:

SELECT Concat(vend_name, ‘ (‘, vend_country, ‘)‘ AS vend_title FROM Vendors
ORDER BY vend_name;

技術分享

concat()主要是去除多余的空格。

SELECT語句本身與以前使用的相同,只不過這裏的計算字段之後跟了文本AS vend_title。它指示SQL創建一個包含指定計算結果的名為vend_title的計算字段。從輸出可以看到,結果與以前的相同,但現在列名為vend_title,任何客戶端應用都可以按名稱引用這個列,就像它是一個實際的表列一樣。
說明:AS通常可選
在很多DBMS中,AS關鍵字是可選的,不過最好使用它,這被視為一條最佳實踐。
提示:別名的其他用途
別名還有其他用途。常見的用途包括在實際的表列名包含不合法的字符(如空格)時重新命名它,在原來的名字含混或容易誤解時擴充它。
警告:別名
別名既可以是一個單詞也可以是一個字符串。如果是後者,字符串應該括在引號中。雖然這種做法是合法的,但不建議這麽去做。多單詞的名字可讀性高,不過會給客戶端應用帶來各種問題。因此,別名最常見的使用是將多個單詞的列名重命名為一個單詞的名字。
說明:導出列
別名有時也稱為導出列(derived column),不管怎麽叫,它們所代表的是相同的東西。

3.2執行算術計算

計算字段的另一常見用途是對檢索出的數據進行算術計算。

SELECT order_num,
prod_id,
quantity,
item_price,
quantity*item_price AS expanded_price
FROM OrderItems
WHERE order_num = 20008;

技術分享

輸出中顯示的expanded_price列是一個計算字段,此計算為quantity*item_price。

技術分享

提示:如何測試計算
SELECT語句為測試、檢驗函數和計算提供了很好的方法。雖然SELECT通常用於從表中檢索數據,但是省略了FROM子句後就是簡單地訪問和處理表達式,例如SELECT 3 * 2;將返回6,SELECT Trim(‘ abc ‘);將返回abc,SELECT Now();使用Now()函數返回當前日期和時間。現在你明白了,可以根據需要使用SELECT語句進行檢驗。

4.使用函數

4.1文本處理數據

全部字母變為大寫:

SELECT vend_name, UPPER(vend_name) AS vend_name_upcase
FROM Vendors
ORDER BY vend_name;

技術分享

可以看到,UPPER()將文本轉換為大寫,因此本例子中每個供應商都列出兩次,第一次為Vendors表中存儲的值,第二次作為列vend_name_upcase轉換為大寫。

技術分享

4.2日期和時間處理函數

這個在不同的數據庫中差別比較大

MySQLMariaDB具有各種日期處理函數,但沒有DATEPART()。MySQLMariaDB用戶可使用名為YEAR()的函數從日期中提取年份:
輸入:
SELECT order_num
FROM Orders
WHERE YEAR(order_date) = 2012;

4.3數值處理函數

技術分享

數值函數都是差不多的,自行看文檔解決即可。

作者:今孝
出處:http://www.cnblogs.com/jinxiao-pu/p/6817187.html
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接。

覺得好就點個推薦把!

SQL必知必會 -------- 通配符、計算字段、函數