(五)DQL——SQL函数
五、DQL——SQL函数
在SQL中我们也可以使用函数对检索出来的数据进行函数操作。
SQL函数会带来的问题:
- 使用的函数很可能在运行环境中无法工作。大部分DBMS会有自己特定的函数,这就意味着采用SQL函数的代码可移植性是很差的,因此在使用函数的时候需要特别注意。
- 注意大小写规范。
- Linux的环境下,数据库名、表名、变量名是严格区分大小写的,而字段名是忽略大小写的。
- Windows的环境下全部不区分大小写。
1. 算术函数
select abs(-2) //2
select mod(101, 3) //2
select round(37.25, 1) //37.3
2. 字符串函数
select concat('abc', 123) //abc123
select length('你好') //6
select char_length('你好') //2
select lower('ABC') //abc
select upper('abc') //ABC
select replace('fabcd', 'abc', 123) //f123d
select substring('fabcd', 1, 3) //fab [start, end]
3. 日期函数
current_date, current_time, current_timestamp, extract
select current_date() //2022-08-08
select current_time() //21:26:34
select current_timestamp() //2022-08-08 21:26:34
select extract(YEAR from '2022-08-08') //2022
select date('2022-08-08 21:26:34') //2022-08-08
DATE日期格式必须是yyyy-mm-dd的形式。
如果要进行日期比较,就要使用DATE函数,不要直接使用日期与字符串进行比较。因为很多时候你无法确认birthdate的数据类型是字符串,还是datetime类型,如果你想对日期部分进行比较,那么使用
DATE(birthdate)
来进行比较是更安全的.
4. 转换函数
cast, coalesce
SELECT CAST(123.123 AS INT),运行结果会报错。
SELECT CAST(123.123 AS DECIMAL(8,2)),运行结果为123.12。
SELECT COALESCE(null,1,2),运行结果为1。
显示英雄以及他的物攻成长,对应字段为attack
。我们让这个字段精确到小数点后一位
select name, rount(attack, 1) from heros
想显示英雄最大生命值的最大值
select max(hp_max) from heros
我们想要知道最大生命值最大的是哪个英雄
select name, hp_max from heros where hp_max = (select max(hp_max) from heros)
想要提取英雄上线日期(对应字段birthdate)的年份,只显示有上线日期的英雄即可(有些英雄没有上线日期的数据,不需要显示)
select name, year(birthday) as birthday from heros where birthday is not null
们需要找出在2016年10月1日之后上线的所有英雄。
select * from heros where date(birthday)> '2016-10-01'