Mysql
数据库入门—sql
函数
Author:qyan.li
Date:2022.2.21
一、 前言
sql
作为数据库操作中的主流语言之一,同其他编程语言一致,内部同样包含多种内置函数,方便用户使用其进行更高效的查询。
二、 sql
函数
sql
语言中函数主要包含四种,分别为字符函数、数学函数、日期函数、流程控制函数等,下面将针对其一一进行介绍。
1. 字符函数
-
获取字符串长度函数
length()
函数# 按照Localname的字符个数进行降序排列 select name,Localname,length(Localname) from world.country order by length(Localname) desc;
-
连接字符串函数
concat()
函数concat()函数中包含三个变量,分别为三个拼接的目标对象
# 按照指定方式拼接字符串(xx was founed in xxxx)并显示 select name,code,concat(name,' was founded in ',IndepYear) from world.country where IndepYear is not null;
-
字符串截取函数
subtsr()
sql
语言中字符串下标从1开始,substr()
函数包含三个变量**(目标字符串,起始索引,截取长度)**# 在特定语句中截取出特定的单词(从索引8开始截取5个字母) select substr('I love UESTC',8,5);
-
小Tips:
sql
结构化查询语言中,字符串下标从1开始
-
-
获取字母索引
instr()
,返回特定字符串中特定字母第一次出现时的索引# 获取国家名称中第一次出现字母a的索引位置 select name,instr(name,'a') from world.country;
-
去除字符串前后指定字符
trim()
select trim(' UESTC '); # 去除字符串前后的空格 select trim('_' from '_UESTC_'); # 去除前后指定字符'_' select trim('_' from '__UESTC__'); # 递归去除
-
小Tips:
- 去除字符可以指定,默认去除空格
- 递归去除,无论有多少,均可以去除
-
-
字符串填充函数
lpad和rpad
函数select lpad('UESTC',10,'-'); select rpad('UESTC',10,'_'); select lpad(rpad('UESTC',7,'_'),9,'_');
-
小Tips:
pad()
中包含三个参数,分别为待填充字符串,填充后总长度,填充变量
-
-
大小写变换函数
lower()变换小写,upper()变换大写
select name,lower(name),upper(name) from world.country
2. 数学函数
sql
语言中的数学函数与其他编程语言中类似,此处仅列明若干常用的数学函数,以供参考。
-
绝对值函数
abs()
select abs(3.14); select abs(-3.14); # 按照GNP变化的绝对值进行降序排列 select name,GNP,GNPold,abs(GNP-GNPold) GNP变化 from world.country where GNPold is not null order by GNP变化 desc;
-
近似函数
近似函数主要包含三种,分别代表三种常见的近似规则:向上取整,向下取整,四舍五入
# ceil向上取整 select ceil(-1.01),ceil(0.09),ceil(1.00); # floor向下取整 select floor(-1.01),floor(0.09),floor(1.00); # round四舍五入 select round(3.1415926),round(3.1415926,3),round(3.1415926,5);
-
截断函数
truncate()
截断函数的主要作用在于将小数按照指定的位数进行截断,其间并不包含任何近似的操作。
select truncate(3.1415926,3);
-
取余函数
mod()
取余函数
mod()
结果的符号与被除数的符号相同select -10%3,10%3,-10%-3,10%-3;
3. 日期函数
日期函数的相关使用与sql
语言中日期的数据类型密切相关,衍生诸多相关的日期函数
-
显示时间、当前日期
now() curdate()
select now(); # 显示当前详细时间 select curdate(); # 显示当前日期
-
显示两个日期之间的差值
datediff()
select datediff('2019-1-1','1956-9-8');
-
日期字段格式化函数
date_format()
date_format()
日期字段函数可以将日期字段按照自己的意愿显示为特定的格式select address,last_update,date_format(last_update,'%Y年%m月%d日 %H:%i:%s') 租赁时间 from sakila.address;
小Tips:
严格按照上述字母进行日期格式的转换,时(H与h的区别在于24计时制和12计时制的区别)
-
字符串解析日期字段函数
str_to_date()
str_to_date()
函数可以将字符串转化为日期形式的字段,便于后续比较和应用select * from sakila.address where last_update > str_to_date('2014年09月25日 22:34:10','%Y年%m月%d日 %H:%i:%s');
4. 流程控制函数
-
ifnull()
当给定字段内容为空时,显示指定的默认值,常见使用格式ifnull(str1,str2)
表示为当str1
为空时,显示str2
select name,ifnull(IndepYear,'无独立年份') from world.country; select name,concat(name,'was independent in',ifnull(IndepYear,'---')) from world.country; select name,ifnull(concat('建国时间为',IndepYear,'年'),'没有建国时间') from world.country;
-
if(<判断式>,结果1,结果2)
,类似其他编程语言中的三目运算符,满足条件显示结果1,不满足条件显示结果2select if(10>5,'Yes','No') as result; select if(IndepYear is null,'没有建国年份',concat(name,' was independent in ',IndepYear)) from world.country;
-
case..hen..then..end
条件分支语句SELECT name, continent, CASE continent WHEN 'Asia' THEN '亚洲' WHEN 'North America' THEN '北美洲' WHEN 'Africa' THEN '非洲' WHEN 'Oceania' THEN '大洋洲' WHEN 'South America' THEN '南美洲' WHEN 'Antarctica' THEN '南极洲' ELSE '暂不做翻译' END AS '中文名称' FROM world.country; # 借助于ctrl+b将代码进行格式化后的结果