sql函数存在问题:


          每个dbms都有自己特定的函数,事实上,只有少数几个函数被所有主要的DBMS等同的支持,与sql语句不一样,sql函数不是可移植的


       那么,是否应该使用函数,决定权在于我们自己,如果决定使用函数,应该保证做好代码注释,以便以后能确切地知道所编写的sql代码的含义


       那么现在我们简单学习下怎么使用sql函数吧


       大多数sql实现支持以下类型的函数:


       1用于处理文本串(如删除或填充值,转换值为大写或小写)的文本函数.


       2用于在数值数据上进行算术操作(如返回绝对值,进行代数运算)的数值函数


       3用于处理日期和时间值并从这些值中提取特定成分(例如,返回两个日期之差,检查日期有效性等)的日期和时间函数


       4返回dbms正在使用的特殊信息(如返回用户登录信息)的系统函数.


      

文本处理函数


例select vend_name ,UPPER(vend_name) AS vend_name_upcase from Vendors order by vend_name;



         可看出搜索出来的结果是两列,第二列为第一列转换为大写


       注

:常用文本处理函数

    

常用文本处理函数

函数

说明

LEFT()(或使用子字符串函数)

返回串左边的字符

length()(也使用DATALENGTH()或LEN())

返回串的长度

LOWER()(access使用LCASE())

将串转换为小写

LTRIM()

去掉串左边空格

RIGHT()(或使用子字符串函数)

返回串右边字符

RTRIM()

去掉串右边空格

SOUNDEX()

返回串的SOUNDEX值

UPPER()(Access使用UCASE())

将串转换为大写


       其中SOUNDEX是一个将任何文本转换为语音表示的字母数字模式算法,他考虑了类似的发音字符或音节,使得能对串进行发音比较而不是字母比较


       比如Customers表中有个顾客KID Place,联系名为Michelle Green,但是如果这事输入错误,实际联系名为Michael Green,显然安正确的联系名搜索不会返回数据


       那么我们尝试下使用SOUNDEX(),他匹配所有发音类似Michael Green 的联系名


sleect cust_name,cust_contact from Customers where SOUNDEX(cust_contact) = SOUNDEX('Michael Green');



      

日期和时间处理函数

     日期和时间采用相应的数据类型存储在表中,每种DBMS都有自己的变体,不幸的是,他们很不一致,移植性很差,比如在SQL Server和Sybase中检索2004年的所有订单,为select order_num From Orders where DATEPART(yy,order_date)

=2004;


    在Access中则应该select order_num from Orders where DATEPART('yyyy',order_date)=2004;


       在PostgreSQL中则应该 select order_num from Orders where DATE_PART('year',order_date)=2004;


       Mysql具有各种日期处理 函数,但是没有DATEPART.Mysql用户可使用YEAR()的函数从日期中提取年份


       select order_num from Orders where YEAR(order_date) = 2004;


       Oracle也没有DATEPART函数,不过有几个可用来完成相同检索的日期处理函数


       如select order_num from Orders where to_number(to_char(order_date,'YY'))=2004;


       或者select order_num from Orders where order_date BETWEEN to_date('01-JAN-2004') AND to_date('31-DEC-2004');


      

数值处理函数

   

常用数据处理函数

ABS()

返回一个数的绝对值

COS()

返回1个角度的余弦

EXP()

返回1个数的指数值

PI()

返回圆周率

SIN()

返回1个角度的正弦

SQRT()

返回1个数的平方根

TAN()

返回1个角度的正切



       在主要的dbms中数值函数是最一直最统一的函数