mysql中的SQL函数

算术函数

  • ABS :取绝对值
  • MOD:取余
  • ROUND:四舍五入时指定小数点位数
SELECT ABS(-1);  # 结果为 1

SELECT MOD(22,5);  # 22%5 结果为 2

SELECT ROUND(15.43,1); # 结果为 15.4

字符串函数

  • CONCAT: 将多个字符串连接起来
  • LENGTH: 计算字段的长度,一个汉字算三个字符,字母和数字算一个字符
  • CHAR_LENGTH:所有都算做一个字符
  • LOWER:全部转为小写
  • UPPER:全部转为大写
  • REPLACE:替换字符
  • SUBSTRING:截取字符串(字符串, 开始截取位置, 截取长度)
SELECT CONCAT("%","pibigstar"); # 结果为 %pibigstar
SELECT LENGTH("你好"); # 结果为 6
SELECT CHAR_LENGTH("你好"); # 结果为 2
SELECT LOWER("AB"); # 结果为 ab
SELECT UPPER("ab") # 结果为 AB
SELECT REPLACE("abc","a", "f"); # 结果为 fbc
SELECT SUBSTRING("abc", 1, 2); # 结果为 ab

日期函数

  • DATEDIFF: 比较两个时间
  • CURRENT_DATE:系统当前日期
  • CURRENT_TIME:系统当前时间
  • CURRENT_TIMESTAMP:系统当前时间(日期+时间)
  • ECTRACT:抽取具体的年、月、日
  • DATE:返回时间的日期部分
  • YEAR:返回时间的年份部分
  • MONTH:返回时间的月份部分
  • DAY:返回时间的天数部分
  • HOUR:返回时间的小时部分
  • MINUTE:返回时间的分钟部分
  • SECOND: 返回时间的秒部分
SELECT CURRENT_DATE(); # 2019-06-29
SELECT CURRENT_TIME(); # 21:44:33
SELECT CURRENT_TIMESTAMP(); # 2019-06-29 21:44:33
SELECT EXTRACT(YEAR FROM '2019-06-29'); # 2019
SELECT DATE('2019-06-29 21:44:33'); # 2019-06-29
SELECT DAY('2019-06-29 21:44:33');  # 29

# 查询当天的数据
SELECT * FROM user WHERE DATEDIFF(create_at,now())=0
# 查询昨天的数据
SELECT * FROM user WHERE DATEDIFF(create_at,now())=-1
# 查询这个月的数据
SELECT * FROM user WHERE MONTH(create_at)=MONTH(now())

转换函数

  • CAST:强制数据类型转换
  • COALESCE:返回第一个非空数值
SELECT CAST(65.243 AS DECIMAL(8,2)); # 65.24
SELECT COALESCE(null,null,2,3); # 2

聚合函数

  • SUM:求和
  • AVG:求平均值
  • MAX:找出最大值
  • MIN:找出最小值(接收一个参数)
  • LEAST: 找出多个字段中得最小值 (接收多个参数)
  • COUNT:计数
SELECT SUM(age) FROM user;
SELECT AVG(age) FROM user;
SELECT MAX(age) FROM user;
SELECT MIN(age) FROM user;
SELECT COUNT(*) FROM user; # 计录全部行数,包括null
SELECT COUNT(age) FROM user; # 如果age为null,将过滤
SELECT COUNT(*) FROM user GROUP BY age;
SELECT LEAST(end_time,now());

在SELECT的查询中,关键字的顺序不能颠倒,它们的顺序为:

SELECT...FROM...WHERE...GROUP BY...HAVING...ORDER BY...LIMIT...

游标操作


CREATE PROCEDURE update_attendance()
BEGIN
    DECLARE s int DEFAULT 0;
    DECLARE id varchar(32);
	DECLARE name varchar(32);
    -- 定义游标,并将sql结果集赋值到游标中
    DECLARE report CURSOR FOR SELECT id,name FROM admin_user where sex = '1';
    -- 声明当游标遍历完后将标志变量置成某个值
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET s=1;
    -- 打开游标
    open report;
        -- 将游标中的值赋值给变量,注意:变量名不要和返回的列名同名,变量顺序要和sql结果列的顺序一致
        fetch report into id, name;
        -- 当s不等于1,也就是未遍历完时,会一直循环
        while s<>1 do
            -- 执行业务逻辑
			UPDATE admin_sex SET user_id = id WHERE name = name;
        -- 当s等于1时表明遍历以完成,退出循环
        end while;
    -- 关闭游标
    close report;
END;

你可能感兴趣的:(数据库)