常用的SQL函数
SQL提供了一些常用的内置函数,通常可以把内置函数分为四类:
- 算术函数
- 字符串函数
- 日期函数
- 转换函数
这4类函数分别代表了算数处理、字符串处理、日期处理、数据类型转换。
函数是对提取出来的数据进行操作。
经常会保存一些数值,无论是整数类型,还是浮点类型,实际上对应的就是数值类型。保存一些文本内容,可能是人名,或者某个说明,对应的就是字符串类型。除此之外还需要保存时间,也就是日期类型。
算术函数
示例
SELECT ABS(-2); SELECT MOD(101, 3);
运行结果均为2
字符串函数
常用的字符串函数操作包括了字符串拼接,大小写转换,求长度以及字符串替换和截取等。
SELECT CONCAT('abc' , 123)-- 运行结果:abc123SELECT LENGTH('你好')-- 运行结果:6SELECT CHAR_LENGTH('你好')-- 运行结果:2
日期函数
日期函数是对数据表中的日期进行处理
示例
SELECT CURRENT_DATE()-- 运行结果:2019-04-03SELECT CURRENT_TIME()-- 运行结果:21:26:34SELECT DATE('2019-04-01 12:00:05')-- 运行结果:2019-04-01
转换函数
转换函数可以转换数据之间的类型
示例
SELECT CAST(123.123 AS DECIMAL(8, 2))-- 运行结果:123.12SELECT COALESCE(null, 1, 2) -- 运行结果:1
注:CAST函数在转换数据类型的时候,不会四舍五入,如果原数值有小数,那么转换为整数类型的时候就会报错。
函数使用实战
还是使用王者荣耀数据库,一共69个英雄,23个属性。
实例
- 显示英雄以及他的物攻成长,对应字段为attack_growth,字段精确到小数点后一位
SQL:SELECT name, ROUND(attack_growth,1) FROM heros
运行结果
- 显示英雄最大生命值的最大值
SQL:SELECT MAX(hp_max) FROM heros
运行结果为9328
- 查询最大生命值最大的是哪个英雄,以及对应的数值
SQL:SELECT name, hp_max FROM heros WHERE hp_max = (SELECT MAX(hp_max) FROM heros)
运行结果
- 显示英雄的名字,以及他们的名字字数
SQL:SELECT CHAR_LENGTH(name), name FROM heros
运行结果
- 提取英雄上线日期(对应字段birthdate)的年份,只显示有上线日期的英雄即可
SQL:SELECT name, EXTRACT(YEAR FROM birthdate) AS birthdate FROM heros WHERE birthdate is NOT NULL
另一种写法
SQL: SELECT name, YEAR(birthdate) AS birthdate FROM heros WHERE birthdate is NOT NULL
运行结果
- 找出在2016年10月1日之后上线的所有英雄
SQL: SELECT * FROM heros WHERE DATE(birthdate)>'2016-10-01'
使用下面写法是不安全的
SELECT * FROM heros WHERE birthdate>'2016-10-01'
因为很多时候无法确认birthdate的数据类型是字符串,还是datetime类型,如果对日期部分进行比较,使用DATE()来进行比较是更安全的。
运行结果
注:尽管SQL函数使用起来很方便,但使用的时候还是要谨慎,因为使用的函数很可能在运行环境中无法工作。
总结