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中数值函数是最一直最统一的函数