sql基础———常见函数


1.字符函数

  • concat(x1,x2,***,xn):连接参数
  • length(x):获取参数值的字节个数
  • upper(xx)/lower(xx):把参数变大小写
  • substr(str,begin):第一个参数是一个字符串,第二个参数是从截取从第begin个位置*以及后面全部的字符
  • substr(str,begin,end):截取从begin到end(包括end位置)的字符
  • instr(str1,str2):返回str2的第一次出现在str1中的索引(第一个字母的位置)
  • trim(str):取消字符串中的空格
  • trim(xx from 字符串):把在字符串中的xx全部去掉
  • lpad(str1,n,str2):用指定字符str2来填充str1的左边,让总字符数凑满n个,如果n小于str1的长度,则按照n从str1的左边往右截断,即输出1到n总中的字符
  • rpad:同理
  • replace(str,x1,X2) :把str中的x1用x2代替
    注意:myslq中1表示的就是第一个字符

2.数学函数

  • round:四舍五入
  • ceil:向上取整,返回>=该参数的最小整数
  • floor:向下取整,返回<=该参数的最大整数
  • truncate:截断,小数点后截断到几位
  • mod:取余,被除数为正,则为正;被除数为负,则为负
  • rand:获取随机数,返回0-1之间的小数

3.日期函数

  • now:返回当前系统日期+时间
  • curdate:返回当前系统日期,不包含时间
  • curtime:返回当前时间,不包含日期
  • 可以只取出年月日小时分钟秒 比如 year(now
  • str_to_date:将日期格式的字符转换成指定格式的日期
  • date_format:将日期转换成字符串
    SELECT 
    STR_TO_DATE('3-1998-2', '%c-%Y-%d');
    #输出结果: 1988-03-02
    #两个参数的格式样相同!,左边的符号右边也要有
    

SELECT
DATE_FORMAT(NOW(), ‘%Y年%m月%d日)’);
#输出当前xxxx年xx月xx日
#第一个参数的时间要是一个正常的时间,比如DATE_FORMAT(‘01-2020-02’, ‘%m月%Y年/%d日)’);就会返回NULL

[![占位符](https://s3.ax1x.com/2020/11/12/BvLCTI.png)](https://imgchr.com/i/BvLCTI)

## 4.其他函数
* SELECT VERSION(); 当前数据库服务器的版本
* SELECT DATABASE();    当前打开的数据库
* SELECT USER();        当前用户
* password('字符');       返回该字符的密码形式
* md5('字符');            也是加密的一种形式(MD5)

## 5.流程控制函数
* IF(条件,条件为true输出的内容,条件为false输出的内容)
```sql
SELECT 
  last_name,
  commission_pct,
  IF(
    commission_pct IS NULL,
    '没奖金,呵呵',
    '有奖金,嘻嘻'
  ) 备注 
FROM
  employees ;
  • case的用法:
    #使用一
    case 要判断的字段或表达式
    when 常量1 then 要显示的值1或语句1;
    when 常量2 then 要显示的值2或语句2;
    ...
    else 要显示的值n或语句n;
    end
    

#使用二
case
when 条件1 then 要显示的值1或语句1
when 条件2 then 要显示的值2或语句2

else 要显示的值n或语句n
end

注意如果when后面加语句的话记得加分号

案例(对应两种不同的用法)
```sql
SELECT 
  salary AS 原始工资,
  department_id,
  CASE
    department_id 
    WHEN 30 
    THEN salary * 1.1 
    WHEN 40 
    THEN salary * 1.2 
    WHEN 50 
    THEN salary * 1.3 
    ELSE salary 
  END AS 新工资 
FROM
  employees ; 


SELECT 
  salary,
  CASE
    WHEN salary > 20000 
    THEN 'A' 
    WHEN salary > 15000 
    THEN 'B' 
    WHEN salary > 10000 
    THEN 'C' 
    ELSE 'D' 
  END AS 工资级别 
FROM
  employees ;  

6.分组函数(统计)

  • sum(xx)/avg(xx):求和,求平均 (一般用于处理数值型数据)
  • max/min:求最值 (可以处理任何类型数据)
  • count(xx):计数
  • 注意:以上分组函数都忽略null值,和分组函数一同查询的字段有限制,要求是group by后的字段*
    提示:sum,avg,count等函数可以和DISTINCT一起用
    比如:
    SELECT 
     SUM(DISTINCT salary),
     SUM(salary) 
    FROM
     employees ;

count的特殊介绍:

使用count(\) 统计一共有多少行*

SELECT COUNT(salary) FROM employees;
SELECT COUNT(*) FROM employees;
SELECT COUNT(1) FROM employees;

效率上:

  • MYISAM存储引擎下,count(*)的效率高
  • INNODB存储引擎下,count(*)和count(1)效率差不多,比count(字段)要高一些

文章作者: 灿若星河
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 灿若星河 !
评论
  目录