文章目录
一、各种各样的函数
SQL自带了各种各样的函数,极大地提高了SQL语言的便利性。
所谓函数,就是类似于一个黑匣子,我们输入一个值,它便按照预设的程序定义给出返回值,这个输入的值就称为参数。
函数大致分为如下几类:
算术函数 (用来进行数值计算的函数)
字符串函数 (用来进行字符串操作的函数)
日期函数 (用来进行日期操作的函数)
转换函数 (用来转换数据类型和值的函数)
聚合函数 (用来进行数据聚合的函数)
函数总个数超过200个,不需要完全记住,常用函数有 30~50 个,其他不常用的函数使用时查阅文档即可。
1.算数函数
为在下面学习过程中更好地演示其他几个算数函数,在此构造samplemath表如下:
-
ABS- - 绝对值
语法:ABS(数值)
ABS 函数用于计算一个数字的绝对值,表示一个数到原点的距离。
当 ABS 函数的参数为NULL时,返回值也是NULL。 -
MOD- - 求余数
语法:MOD(被除数,除数)
MOD 是计算除法余数(求余)的函数,是 modulo 的缩写。小数没有余数的概念,只能对整数列求余数。
注意:主流的 DBMS 都支持 MOD 函数,只有SQL Server 不支持该函数,其使用%符号来计算余数。 -
ROUND- -四舍五入
语法:ROUND(对象数值,保留小数的位数)
注意:当参数 保留小数的位数 为变量时,可能会遇到错误,请谨慎使用变量。
执行代码:
SELECT m,
ABS(m)ASabs_col , /*取绝对值*/
n, p,
MOD(n, p) AS mod_col, /*取余*/
ROUND(m,1) AS round_col /*四舍五入*/
FROM samplemath;
运行结果:
2.字符串函数
同样的,为更好地演示下面的字符串函数,我们构造samplestr表如下:
-
CONCAT – 拼接
语法:CONCAT(str1, str2, str3)
MySQL中使用 CONCAT 函数进行拼接。 -
LENGTH – 字符串长度
语法:LENGTH( 字符串 ) -
LOWER – 小写转换
LOWER 函数只能针对英文字母使用,它会将参数中的字符串全都转换为小写。该函数不适用于英文字母以外的场合,不影响原本就是小写的字符。
类似的, UPPER 函数用于大写转换。 -
REPLACE – 字符串的替换
语法:REPLACE( 对象字符串,替换前的字符串,替换后的字符串 ) -
SUBSTRING – 字符串的截取
语法:SUBSTRING (对象字符串 FROM 截取的起始位置 FOR 截取的字符数)
使用 SUBSTRING 函数 可以截取出字符串中的一部分字符串。截取的起始位置从字符串最左侧开始计算,索引(类似下角标)值起始为1。 -
扩展内容)SUBSTRING_INDEX – 字符串按索引截取
该函数用来获取原始字符串按照分隔符分割后,第 n 个分隔符之前(或之后)的子字符串,支持正向和反向索引,索引起始值分别为 1 和 -1。
举个例子:
SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2);
执行结果(也就是说以 . 为分隔符,代表第2个分隔符之前的字符串,这里支持正负索引,如果时-2则代表后两个子字符串):
获取第一个元素比较容易,如果想要获取第二(n)个元素可以采用二次拆分的写法。
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('www.mysql.com', '.', 2), '.', -1);
执行结果(也就是在原来拆分的基础上再进行一次拆分。):
- 扩展内容)REPEAT – 字符串按需重复多次
语法:REPEAT(string, number)
该函数用来对特定字符实现按需重复。
举个例子:
3.日期函数
不同DBMS的日期函数语法各有不同,本课程介绍一些被标准 SQL 承认的可以应用于绝大多数 DBMS 的函数。特定DBMS的日期函数查阅文档即可。
SELECT CURRENT_DATE;--获取当前日期
SELECT CURRENT_TIME;--获取当前时间
SELECT CURRENT_TIMESTAMP;-- 获取当前日期和时间
截取日期元素
语法:EXTRACT(日期元素(年月日时分秒) FROM 日期)
举个例子:
SELECT CURRENT_TIMESTAMP as now,
EXTRACT(YEAR FROM CURRENT_TIMESTAMP) AS year,
EXTRACT(MONTH FROM CURRENT_TIMESTAMP) AS month,
EXTRACT(DAY FROM CURRENT_TIMESTAMP) AS day,
EXTRACT(HOUR FROM CURRENT_TIMESTAMP) AS hour,
EXTRACT(MINUTE FROM CURRENT_TIMESTAMP