首页 > 数据库 >mysql常用函数

mysql常用函数

时间:2022-10-25 19:23:45浏览次数:56  
标签:info 常用 函数 -- num dual mysql DATE select

mysql 函数笔记

本章内容会用到的建表语句和表数据

-- 创建t_info表
CREATE TABLE `t_info` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_name` varchar(30) CHARACTER SET utf8 DEFAULT NULL COMMENT '姓名',
  `age` int(2) DEFAULT NULL COMMENT '年龄',
  `c_score` int(3) DEFAULT NULL COMMENT '语文分数',
  `e_score` int(3) DEFAULT NULL COMMENT '英语分数',
  `the_date` date DEFAULT NULL COMMENT '出分日期',
  `the_time` datetime DEFAULT NULL COMMENT '出分时间',
  `str_time` varchar(30) DEFAULT NULL COMMENT '字符串时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf-8;

-- 插入测试数据
INSERT INTO `t_info` VALUES (1, '张三他爷爷的孙子', 18, 66, 76, '2022-09-01', '2022-09-01 09:01:10', '2022-09-01 09:01:10');
INSERT INTO `t_info` VALUES (2, '李四他爸爸的儿子', 21, 68, 86, '2022-10-13', '2022-10-13 09:01:58', '2022-10-13 09:01:58');
INSERT INTO `t_info` VALUES (3, '王五他自己的自己', 19, 70, 81, '2022-10-16', '2022-10-16 09:02:32', '2022-10-16 09:02:32');

1.日期时间字段相关函数

-- 1. now()获取当前日期和时间  current()   CURRENT_DATE()获取当前日期   CURRENT_TIME()获取当前时间
select now(),CURRENT_DATE(),CURRENT_TIME() from dual;

-- 2. DATE()用来提取时间字段的日期  YEAR() 提取年  MONTH()提取月份,会省略前面的0  DAY()提取天,若日期前有0会忽略
select DATE(str_time), YEAR(the_time), MONTH(the_time), DAY(str_time) from t_info;

-- 3. UNIX_TIMESTAMP()函数,获取当前时间戳,还可以将时间字段转换成时间戳
select UNIX_TIMESTAMP();
select UNIX_TIMESTAMP(the_time) from t_info;

-- 4. 时间格式化函数  DATE_FORMAT()和TIME_FORMAT()功能相同
select DATE_FORMAT(the_time,'%Y/%m/%d %H:%i:%s') from t_info;
select DATE_FORMAT(the_time,'%Y/%m/%d') from t_info;

2. 字符串字段相关函数

-- 1.CONCAT(str1,str2,...,strn)  将str1,str2,...,strn连接为一个完整的字符串
select concat(user_name,age,the_date) from t_info;
select concat(user_name,age,the_date,null) from t_info;               -- 拼接null的话,会将整体返回null
select * from t_info where user_name like concat('%','三','%');       -- mybatis 中使用模糊查询的常见用法

-- 2.CONCAT_WS(sep,str1,str2,...,strn)  拼接并使用tep隔开
select CONCAT_WS('-',user_name,age,'哈哈') from t_info;

-- 3.STRCMP(str1,str2);  如果传入的参数str1大于str2,则返回true;如果参数str1小于str2,则返回false;如果参数str1等于str2,则返回0
select strcmp('22','33') from dual;
select strcmp('33','33') from dual;
select strcmp('33','22') from dual;
select strcmp('33','3a') from dual;     -- 是比较asscll码

-- 4.获取字符串长度函数LENGTH()和字符数函数CHAR_LENGTH()
select LENGTH('张三'),LENGTH('avfwa') from dual;
select CHAR_LENGTH('张三'),CHAR_LENGTH('avfwa') from dual;

-- 5.实现字母大小写转换函数UPPER()和LOWER()
select UPPER('AbCd') from dual;
select LOWER('AbCd') from dual;

-- 6.从现有字符串中截取子字符串 LEFT(str,num);  RIGHT(str,num);  SUBSTRING(str,num,len);  substring_index(str,sep,num)
select LEFT('张三是一个大叔啊',2) from dual;
select RIGHT('张三是一个大叔啊',3) from dual;
select SUBSTRING('张三是一个大叔啊',4,5) from dual;
select substring_index('张三是一个大叔啊','-',-1) from dual;
select substring_index('张三是-一个大叔啊','-',-1) from dual;
select substring_index('张三是-一个-大叔啊','-',2) from dual;

-- 7.去除字符串开始的首位空格  LTRIM(str);去除首部空格  RTRIM(str);去除尾部空格  TRIM(str);去除首尾空格
select LTRIM(' mysql '),RTRIM(' mysql '),TRIM(' mysql ') from dual;     -- 看不出效果
select concat('-',LTRIM('   mysql    '),'-'),concat('-',RTRIM('   mysql   '),'-'),concat('-',TRIM('   mysql   '),'-') from dual;     

-- 8.替换字符串 REPLACE(str,substr,newstr);   INSERT(str,pos,len,newstr);
select REPLACE('1234567','56','aa') from dual;
select INSERT('1234567',2,3,'aaa') from dual;

3. 数值相关函数

-- 1. abs(num)返回num的绝对值   ceil(num)返回大于 num 的最小整数值   floor(num)返回小于 num 的最大整数值  
select abs(-3), ceil(3.1), floor(3.1) from dual;

-- 2.rand() 返回 0 到 1 内的随机值。
select rand();

-- 3.round(num,n) 返回 num 的四舍五入的 n 位小数的值。
select round(16.1466,2);

-- 4.truncate(num,n) 返回数字 num 截断为 n 位小数的结果。
select truncate(3.1466,2) from dual;


4.其他用到过的函数

1.时间加减

DATE_SUB()和DATE_ADD()函数,实现日期增减

DATE_SUB(NOW(),INTERVAL 30 MINUTE) 当前时间减30分钟

DATE_SUB(NOW(),INTERVAL 1 day) 当前时间减1天

DATE_SUB(NOW(),INTERVAL 1 hour) 当前时间减1小时

DATE_SUB(NOW(),INTERVAL 1 second) 当前时间减1秒

DATE_SUB(NOW(),INTERVAL 1 week) 当前时间减1星期

DATE_SUB(NOW(),INTERVAL 1 month) 当前时间减1个月

DATE_SUB(NOW(),INTERVAL 1 quarter) 当前时间减1季度

DATE_SUB(NOW(),INTERVAL 1 year) 当前时间减1年

相对DATE_ADD()是加时间

demo

获取最近10天的数据:

SELECT
*
FROM loit_net_option
WHERE
event_time > DATE_SUB(now(),INTERVAL 10 DAY)

2.判空函数

IFNULL(expression, alt_value)

解释:

expression 必须,要测试的值
alt_value 必须,expression 表达式为 NULL 时返回的值

demo

判断,如果region为null,那么返回值为 “其他”

SELECT IFNULL(region,'其他') as name FROM loit_bear_mine_metal

3.多表拼接总数求和

SELECT
   sum(a)
FROM
   ( SELECT count(*) a FROM loit_bear_pub_school
     UNION
     SELECT count(*) a FROM loit_bear_pub_medical
     UNION
     SELECT count(*) a FROM loit_bear_pub_hotel
     UNION
     SELECT count(*) a FROM loit_bear_pub_sports
     UNION
     SELECT count(*) a FROM loit_bear_pub_culture
     UNION
     SELECT count(*) a FROM loit_bear_pub_religion
     UNION
     SELECT count(*) a FROM loit_bear_pub_scenic_spot
     UNION
     SELECT count(*) a FROM loit_bear_pub_supermarket
     UNION
     SELECT count(*) a FROM loit_bear_pub_social
   ) AS b

4.case判断

SELECT
   ( CASE warning_level WHEN 1 THEN '一级' WHEN 2 THEN '二级' WHEN 3 THEN '三级' ELSE '其他' END ) AS LEVEL,
   count(*) AS count
FROM
   loit_warning_info

5.时间格式的过滤条件

SELECT
   a.area AS code,b.area as name,count(*) AS num
FROM
   loit_warning_info a
LEFT JOIN loit_area b on a.area=b.`code`
where 1=1
<if test="type == 1">
   and  DATE_FORMAT(warning_time,'%Y') BETWEEN #{startDate} and #{endDate}
</if>
<if test="type == 2">
   and  DATE_FORMAT(warning_time,'%Y-%m-%d') BETWEEN #{startDate} and #{endDate}
</if>
<if test="type == 3">
   and  DATE_FORMAT(warning_time,'%Y-%m') BETWEEN #{startDate} and #{endDate}
</if>
GROUP BY a.area
ORDER BY num desc

标签:info,常用,函数,--,num,dual,mysql,DATE,select
From: https://www.cnblogs.com/lfh-blog/p/16825989.html

相关文章

  • linux下安装mysql5.7,实测成功
    1、下载MySQL包1)官网下载(可忽略)这里选择linux通用版本,MySQL5.7.28--64位   将压缩包通过ftp或其他方式传送至服务器上2)yum直接下载[root@A11home]#wget http......
  • 全能型选手——华为云数据库GaussDB(for MySQL)
    数据库对企业的重要性是毋庸置疑的,目前我国企业运用较多的是自行组建的数据库系统,但是随着企业业务量的增加和历史数据累积,自建数据库存储空间小、性能差、功能少、数据安全......
  • git日常工作常用的命令行指令-雷jf
    1.git撤销提交gitreset--hardHEAD^//多次提交执行多次gitpushoriginmaster--force//强制将当前点提交的master分支gitreset--softHEAD^//撤销addgitr......
  • python 高阶函数
    概念能把函数当成参数传递的就是高阶函数一、map"""map(func,Iterable)功能:处理数据把Iterable中的数据一个一个拿出来,扔到func函数中做处理,把处理好的......
  • tf怎么创建层函数
    tf.zeros()函数创建一个所有元素都设置为零的张量.tf.zeros([3,4],tf.int32)#[[0,0,0,0],[0,0,0,0],[0,0,0,0]] 函数参数:shape:整数、整数元组或......
  • 仿函数(函数对象)functor的用法
    引子在set的类模板中,插入元素是会自动排序的,那么这是如何实现的呢。默认的set<int> setl;这种写法,他会调用默认的less函数对象less函数对象实现比较,为排序提供依据,se......
  • 工作中常用的6种设计模式(转载,公众号:苏三。文章原作者公众号:捡田螺的小男孩)
    1.策略模式1.1业务场景假设有这样的业务场景,大数据系统把文件推送过来,根据不同类型采取不同的解析方式。多数的小伙伴就会写出以下的代码:if(type=="A"){//按照A格......
  • CefSharp 常用设置
    CefSettingssettings=newCefSettings();CefSharpSettings.WcfEnabled=true;settings.CefCommandLineArgs.Add("autoplay-policy","no-......
  • alpine、debian、ubuntu 最常用的换源命令
    文档说明:只是记录关键点alpinetest-f/etc/apk/repositories.save||cp/etc/apk/repositories/etc/apk/repositories.savesed-i's/dl-cdn.alpinelinux.org/mirr......
  • 友元函数破坏了类的封装和信息隐藏
    在c++中,通过类可以实现数据的封装性和信息隐藏的能力,而友元函数则破坏了类的封装和信息隐藏的能力,使得类的私有属性的成员变量可以被其他类对象的方法直接访问。#include<......