首页 > 代码库 > SQL学习之使用常用函数处理数据
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() ---返回一个角度的正切
SQL学习之使用常用函数处理数据