1、在介紹使用函數處理數據前,先說下使用DBMS(數據庫管理系統)處理數據所帶來的問題!算法
一、與幾乎全部的DBMS都同等的支持SQL語句(如SELECT)不一樣,每個DBMS都有特定的函數,事實上,只有少數幾個函數被全部主要的DBMS等同的支持。數據庫
好比,像提取字符串的組成部分,ACESS使用MID();DB二、Oracle、Postgre和SQLite使用SUBSTR(),而MySQL和SQL SERVER使用SUBSTRING();函數
好比,數據類型的轉換,Access和Oracle使用多個函數,每種類型的轉換有一個函數;DB2和PostgreSQL使用Cast();MariaDB、MySQL和SQL Server使用CONVERT();spa
好比,獲取當前日期,Access使用Now();DB2和PostgreSQL使用CURRENT_DATE;MariaDB和MySQL使用CURDATE();Oracle使用SYSDATE,SQL Server使用GETDATE(),SQLite使用DATE();code
經過上面的例子咱們能夠看出,與SQL語句不同,SQL函數是不能夠移植的。這意味這特定SQL實現編寫的代碼在其餘實現中可能不正常。
blog
因此若是你在編寫SQL程序的時候,須要考慮程序的可移植性,那麼你在使用函數的時候必定要慎重,由於這些函數,在某些環境中可能沒被實現,因此你在編寫SQL代碼的時候必定要寫好註釋,來講名這段代碼是幹嗎用的!以便於後續的開發或者庫之間的移植!索引
二、下面是大多數SQL實現並支持一下的函數開發
(1)用於處理文本字符串(如刪除或者填充,轉換值爲大寫或者小寫)的文本函數。字符串
(2)用於在數值數據上進行算術操做(如返回絕對值,進行代數運算)的數值函數。it
(3)用於處理日期和時間值並從這些值中提取特定成分(如返回兩個日期之差,檢查日期的有效性)的日期和時間函數。
(4)返回DBMS正使用的特殊信息(如返回用戶登陸信息)的系統函數
下面是經常使用的文本處理函數
一、LEFT() ---返回字符串左邊的字符
用法LEFT(計算字段,index),index表示向左查找開始的索引 以下代碼:
select cname,cno,tno from dbo.course where cno='c001'
如今我須要cname列值中'S'左邊的字符串,下面是解決代碼:
select LEFT(cname,2),cno,tno from dbo.course where cno='c001'
ok,完成需求!
二、RIGHT() ---返回字符串右邊的字符
用法和LEFT()方法相反
三、LENGTH() (也可使用DATALENGTH()或LEN()) ---返回字符串的長度 SQL Server中可使用DATALENGTH和LEN()
用法:以下代碼:
select DATALENGTH(cname),cno,tno from dbo.course where cno='c001'
四、 文本處理函數之UPPER()函數 ---將字符串轉爲大寫
用法:UPPER(計算字段),將計算字段所在的列值所有轉換成大寫字母,看以下代碼:
select top 5 cname,cno,tno from dbo.course
如今有一個需求,須要將cname列值所有轉換成大寫,下面是解決代碼:
select top 5 UPPER(cname),cno,tno from dbo.course
ok,需求完成!
六、文本處理函數之LOWER()函數 ---將字符串轉換成小寫
用法和UPPER()函數相反!
七、SOUNDEX() ---返回字符串的SOUNDEX值
SOUNDEX是一個將任何文本字符串轉換描述其語音表示的字母數字模式的算法。SOUNDEX考慮了相似的發音字符和音節,使得能對字符串進行發音比較而不是字母比較!雖然SOUNDEX不是SQL概念,但多數DBMS都提供對SOUNDEX的支持!代碼以下:
select * from student where sname='Michael Green'
這個時候咱們忘記sname的列值怎麼拼了,只記得他的讀音,這個時候使用SOUNDEX()函數就一樣能檢索出這條記錄,代碼以下:
select * from dbo.student where SOUNDEX(sname)=SOUNDEX('Michelle Green')
ok,完成檢索!
八、日期和時間處理函數DATEPART()函數
在使用日期和時間處理函數編寫程序前,須要注意一點,不一樣的DBMS都有本身特有的時間和日期格式,因此他們很不一致,可移植也很是差!
有以下代碼:
select * from tb_order
如今有一個需求,須要檢索2016年的全部訂單數,下面是解決代碼:
select * from tb_order where DATEPART(YY,orderdate)=2016
ok,需求完成!
九、下面是經常使用的數值處理函數
ABS() ---返回一個數的絕對值
COS() ---返回一個角度的餘弦
EXP() ---返回一個數的指數值
PI() ---返回圓周率
SIN() ---返回一個角度的正弦
SQRT() ---返回一個數的平方根
TAN() ---返回一個角度的正切