(五)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'
posted @ 2022-08-24 17:09  言思宁  阅读(32)  评论(0编辑  收藏  举报