Data Query Language 2.0 函数

2. 函数

  • 函数在sql中就是将实现一种功能的逻辑语句封装而形成的方法
  • 目前着重于调用已有函数,之后研究一下怎么DIY
    #调用的语法
    select function(parameters) from tab1e
  • 主要研究函数名、函数功能,函按形态分单行(处理用)、分组函数(统计聚合用)

2.1 单行函数

  • 字符函数
  • 数学函数
  • 日期函数
  • 其他函数
  • 其他函数
  • 流程控制函数

2.1.1 字符函数

length:参数值的字节数

select length('hhh')#返回3
select length('蒋璁666')#返回9
- UTF-8 中文3字节
- GBK 中文2字节

concat:拼接字符串

select concat(last_name,'_',first_name) #拼接成姓名

upper、lower

select upper('bill') #大写字母
select lower('HaHHaaaA') #全体小写

substr:截取字符

# select substr(str,pos)索引从1开始数
select substr('小岛秀夫永远滴神',5)#从5开始后所有字符
select substr('小岛秀夫永远滴神',1,4)#从1开始截取字符长度为4
  • 都是字符长度,不是字节长度

instr:返回子串的起始索引(第一次出现)

select instr('张三欠李四三百万','李四') #返回7
select instr('李四说,张三欠李四三百万','李四') #重复,返回1

trim:去除空格

select trim('   d asd  ad as d   ')#删除前后所有空格
select trim('&' from '&&&&&&&&&&&李四&&&&&&&&&&&')#删除前后指定字符

lpad:left左填充

select lpad('蒋璁',10,'')#用填充,成为长度10
select lpad('蒋璁',1,'$')#删减满足长度1

replace:替换

select replace(str1,str2,str3) #将str1中的str2替换成str3
  • 若出现重复,都会替换!!!

2.1.2 数学函数

round:四舍五入

select round(1.491234)#输出1
select round(1.491234,1)#输出1.5
select round(1.491234,2)#输出1.49

ceil:向上取整(不小于参数的最小整数)

select ceil(1.0000000000000008)#输出2
select ceil(1.000)#输出1
select ceil(-1.24)#输出-1

floor:向下取整

select floor(-9.990000008)#输出-10

truncate:截断

select truncate(1.6666,1)#输出1.6

mod:取余数

select mod(10,7)#输出3
select mod(-10,7)#输出3
select mod(-10,-7)#输出-3

2.1.3 日期函数

now:返回当前日期时间

select now()

curdate:返回当前日期不返回时间

select curdate()

curtime:返回当前时间不返回日期

select curtime()

year、month、day、hour、minute获取指定部分

select year(now()) 年
select year('1998-10-06') 年#直接读取字符,很牛
select year(hiredate) from employees #处理字段

str_to_date:将日期格式字符转化为指定格式日期

select str_to_date(str,form)
select str_to_date('1998-10-06','%Y-%c-%d')
  • form有:%Y(四位年份)、%y(两位年份),见下图方便日后查询:
    file

date_format:将日期格式转化为字符(按格式显示)

select date_format(now(),'%Y年%m月%d日')

2.1.4 其他函数

version():查看当前版本
database():查看当前数据库
user():查看当前用户

2.1.5 流程控制函数

实现ifelse效果,相比于where,可以返回新值

select if(judgement,true,false)
  • judgement:判断条件
  • true:为真返回什么
  • false:为假返回什么
#查询有没有奖金
select first_name, if(commission_pct>0,'有奖金','哦豁没有') 有无奖金
from employees

case函数

case 判断字段或表达式
when 常量1 then 返回的语句或值;
when 常量2 then 返回的语句或值;
...
else 返回的语句或值 #作为默认情况
end

case可以与select组合成为表达式的一部分(作为select出来的一项)

select salary 原始工资, department_id,
case department_id
when 30 then salary*1.1
WHEN 40 THEN salary*1.2
WHEN 50 THEN salary*1.3
WHEN 60 THEN salary*1.4
else salary
end as 高工资
from employees

case可以拿出来做多重if

case
when 条件1 then 返回的语句或值;
when 条件2 then 返回的语句或值;
...
else 返回的语句或值 #作为默认情况
end

实例:查询员工工资情况,大于两万显示高手,大于1.5w显示中手,大于1w显示般手,其他显示垃圾

select salary,
case
when salary>20000 then '高手'
when salary>15000 then '中手'
when salary>10000 then '般手'
else '垃圾'
end as 工资水平
from employees

2.2分组函数

做统计用的函数
sum

SELECT SUM(salary) FROM employees

avg

SELECT AVG(salary) FROM employees

max

SELECT MAX(salary) FROM employees

min

SELECT MIN(salary) FROM employees

count
+字段:

SELECT COUNT(salary) FROM employees

+*:效率最高
统计所有列不为null个数,取并集(取最多的)
+1:
统计行数(本质是数1)

  • 可以逗号一并使用
  • 也可以搭配数学函数使用
  • 支持的参数类型:sum,avg:数值型;max,min:可以排序的内容即可;count:不为null的个数
  • 是否忽略null:sum,avg不考虑null项;max,min同
  • 可以与distinct搭配,去重:
    select count(distinct salary) from employees
  • 和其他字段搭配会有逻辑错误(随机乱选一个字段值匹配分组函数值)
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇