SQL學習之使用常用函數處理數據


一、在介紹使用函數處理數據前,先說下使用DBMS(數據庫管理系統)處理數據所帶來的問題!

1、與幾乎所有的DBMS都同等的支持SQL語句(如SELECT)不同,每一個DBMS都有特定的函數,事實上,只有少數幾個函數被所有主要的DBMS等同的支持。

比如,像提取字符串的組成部分,ACESS使用MID();DB2、Oracle、Postgre和SQLite使用SUBSTR(),而MySQL和SQL SERVER使用SUBSTRING();

比如,數據類型的轉換,Access和Oracle使用多個函數,每種類型的轉換有一個函數;DB2和PostgreSQL使用Cast();MariaDB、MySQL和SQL Server使用CONVERT();

比如,獲取當前日期,Access使用Now();DB2和PostgreSQL使用CURRENT_DATE;MariaDB和MySQL使用CURDATE();Oracle使用SYSDATE,SQL Server使用GETDATE(),SQLite使用DATE();

通過上面的例子我們可以看出,與SQL語句不一樣,SQL函數是不可以移植的。這意味這特定SQL實現編寫的代碼在其他實現中可能不正常。

 

所以如果你在編寫SQL程序的時候,需要考慮程序的可移植性,那么你在使用函數的時候一定要慎重,因為這些函數,在某些環境中可能沒被實現,所以你在編寫SQL代碼的時候一定要寫好注釋,來說名這段代碼是干嘛用的!以便於后續的開發或者庫之間的移植!

 

 

2、下面是大多數SQL實現並支持一下的函數

(1)用於處理文本字符串(如刪除或者填充,轉換值為大寫或者小寫)的文本函數。

(2)用於在數值數據上進行算術操作(如返回絕對值,進行代數運算)的數值函數。

(3)用於處理日期和時間值並從這些值中提取特定成分(如返回兩個日期之差,檢查日期的有效性)的日期和時間函數。

(4)返回DBMS正使用的特殊信息(如返回用戶登錄信息)的系統函數

 

 

下面是常用的文本處理函數

1、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,完成需求!

 

2、RIGHT()   ---返回字符串右邊的字符

用法和LEFT()方法相反

3、LENGTH() (也可以使用DATALENGTH()或LEN())      ---返回字符串的長度    SQL Server中可以使用DATALENGTH和LEN()

用法:如下代碼:

select DATALENGTH(cname),cno,tno from dbo.course where cno='c001'

4、 文本處理函數之UPPER()函數      ---將字符串轉為大寫

用法:UPPER(計算字段),將計算字段所在的列值全部轉換成大寫字母,看如下代碼:

select top 5 cname,cno,tno from dbo.course

現在有一個需求,需要將cname列值全部轉換成大寫,下面是解決代碼:

select top 5 UPPER(cname),cno,tno from dbo.course

ok,需求完成!

6、文本處理函數之LOWER()函數      ---將字符串轉換成小寫

用法和UPPER()函數相反!

7、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,完成檢索!

 

8、日期和時間處理函數DATEPART()函數

在使用日期和時間處理函數編寫程序前,需要注意一點,不同的DBMS都有自己特有的時間和日期格式,所以他們很不一致,可移植也非常差!

有如下代碼:

select * from tb_order

現在有一個需求,需要檢索2016年的所有訂單數,下面是解決代碼:

select * from tb_order where DATEPART(YY,orderdate)=2016

ok,需求完成!

 

9、下面是常用的數值處理函數

ABS()      ---返回一個數的絕對值

COS()      ---返回一個角度的余弦

EXP()      ---返回一個數的指數值

PI()      ---返回圓周率

SIN()      ---返回一個角度的正弦

SQRT()      ---返回一個數的平方根

TAN()      ---返回一個角度的正切

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM