和其他计算机语言一样,SQL也可以用函数处理数据。
每个DBMS都有特定的函数,只有很少数几个函数被所有DBMS同等支持。
因此,很多代码不可移植。但是如果不使用这些函数,编写某些程序代码会很艰难,必须利用其他DBMS方法。所以,是否使用函数取决于你的想法,笔者建议在使用的函数后面加上注释。
使用函数
SQL支持的函数:处理文本字符(转换大小写,删除填充值),算术操作(返回绝对值,加减乘除),处理时间和日期(返回两个日期之差,检查日期有效性),生成易懂的格式化函数(货币符号表示金额)。
文本处理函数
上一篇笔记中,用到了RTRIM()函数来去掉右边的空格,下面是另一个例子,使用UPPER()函数。
SELECT vend_name,UPPER(vend_name)AS vend_name_upcase
FROM Vendors
ORDER BY vend_name;
输出结果是将所有供应商转换为大写
下面给出常用的文本处理函数
LEFT() | 返回字符串左边的字符 |
LENGTH() | 返回字符串的长度 |
LOWER() | 将字符串转换为小写 |
LTRIM() | 去掉字符串左边的空格 |
RIGHT() | 返回字符串右边的字符 |
RTRIM() | 去掉字符串左边的空格 |
SUBSTRING() | 提取字符串的组成部分 |
SOUNDEX() | 返回字符串的SOUNDEX值(听起来读音相似) |
UPPER() | 将字符串转换为大写 |
其中SOUNDEX是指发音替换。例如:
SELECT cust_name,cust_contact
FROM Customers
WHERE SOUNDEX(cust_contact)=SOUNDEX('Michale Green');
输出结果是Micheel Green,因为Micheel和Michale读音相似。
日期和时间处理函数
日期和时间函数移植性最差 ,但是重要性很高。
举个例子,按年份查找订单,在SQL SERVER中检索:
SELECT order_num
FROM Orders
WHERE DATEPART(yy,order_date)=2020;
WHERE字句过滤出2020年的订单号。
注意,在MYSQL中,使用的是Year()函数
SELECT order_num
FROM Orders
WHERE Year(order_date)=2020;
数值处理函数
ABS() | 返回绝对值 |
COS() | 返回一个角度的余弦 |
EXP() | 返回一个数的指数 |
PI() | 返回圆周率π的值 |
SIN() | 返回一个角度的正弦 |
SQRT() | 返回一个数的平方根 |
TAN() | 返回一个角度的正切 |