Java -- Mysql 函数

1、日期操作

1、当前系统时间, NOW()取的是语句开始执行的时间,SYSDATE()取的是动态的实时时间
select NOW(),CURRENT_TIMESTAMP 两者是一样的
select CURDATE()
select CURTIME()

2、日期格式化为字符串
select DATE_FORMAT(NOW(), '%Y')    年4位,2019
select DATE_FORMAT(NOW(), '%y')    年2位,19
select DATE_FORMAT(NOW(), '%w')    周几,0=星期日, 6=星期六

select DATE_FORMAT(NOW(), '%T')    时间, 24-小时 (hh:mm:ss),11:10:01

select DATE_FORMAT(NOW(), '%Y')    年4位,2019
select DATE_FORMAT(NOW(), '%m')    月,数值(00-12),12
select DATE_FORMAT(NOW(), '%d')    日,数值(00-31),28
select DATE_FORMAT(NOW(), '%H')    时,数值(00-23),11
select DATE_FORMAT(NOW(), '%i')    分,数值(00-59),07
select DATE_FORMAT(NOW(), '%s')    秒,数值(00-59)

3、字符串转化为日期
select STR_TO_DATE('2019-09-09 08:00:00', '%Y-%m-%d %H:%i:%s')

4、时间加减、DATE_ADD、DATE_SUB
select DATE_ADD(NOW(), interval 1 year)
select DATE_ADD(NOW(), interval 1 month)
select DATE_ADD(NOW(), interval 1 day)
select DATE_ADD(NOW(), interval 1 hour)
select DATE_ADD(NOW(), interval 1 minute)
select DATE_ADD(NOW(), interval 1 second)

5、时间戳
select UNIX_TIMESTAMP()    返回单位为秒
select UNIX_TIMESTAMP(NOW())

select FROM_UNIXTIME(1577684770)    将时间戳转换为时间,参数为秒

6、获取年月日时分秒、
YEAR、MONTH、DAYOFMONTH、HOUR、MINUTE、SECOND

QUARTER 季度
WEEKDAY 周几,周日是0

select YEAR('2019-10-11 09:08:07')

7、两个时间是否交叉判断
<if test="startTime != null and startTime != '' and endTime != null and endTime != ''">
    AND NOT (a.start_time > #{endTime} OR a.end_time &lt; #{startTime})
</if>

2、数学操作

1、取余
select MOD(10, 7)    结果是3
select 10 MOD 7      结果是3
select 10%7          结果是3

2、取商
select 10 DIV 7      结果是1

3、获取整数
select CEIL(4.1)     不小于x的最小整数值,结果是5
select FLOOR(4.1)    不大于x的最大整数值,结果是4

4、随机数
select RAND()        返回一个随机浮点值v,范围在0到1之间
select FLOOR(RAND()*10)    获取0到10之间的整数,不包括10
select FLOOR(7+RAND()*(20-7))        指定区间的数据,7到20之间的数据,不包括20
select FLOOR(7+RAND()*(20-7+1))      指定区间的数据,7到20之间的数据,包括20

5、四舍五入
select ROUND(5.1)    返回5
select ROUND(5.5)    返回6
select ROUND(5.565, 2)    值保留到小数点后的y位,返回5.57
select ROUND(5.564, 2)    值保留到小数点后的y位,返回5.56
select TRUNCATE(5.568, 2) 相比ROUND(x, y),直接截取,不会进行四舍五入

3、字符串操作

1、字符串长度
select CHAR_LENGTH("abcdefg")        返回7,一个多字节字符算作一个单字符
select CHAR_LENGTH("中文博大精深")    返回6

select LENGTH("abcdefg")        返回7
select LENGTH("中文博大精深")    返回18,返回值为字符串的字节长度
说明:
1)、utf8编码下,一个汉字三个字节,一个数字或字母一个字节。
2)、gbk下,一个汉字两个字节,一个数字或字母一个字节。
3)、LENGTH()<>CHAR_LENGTH()可以用来检验是否含有中文字符

2、合并字符串
select CONCAT('a', 'b', 'c')    返回abc
select CONCAT('a', null, 'c')   返回NULL 

select CONCAT_WS('|', 'b', 'c', 'd', 'e')    第一个参数是分隔符,返回 b|c|d|e
select CONCAT_WS('|', 'b', 'c', null, 'e')   忽略null,返回 b|c|e

3、替换字符串
select INSERT('abcdefg', 1, 2, 'hh')    从第1位开始替换,替换2位,也就是将ab替换成hh,结果为 hhcdefg

select INSERT('abcdefg', 1, 1, 'hh')    从第1位开始替换,替换1位,也就是将a替换为hh,结果为hhbcdefg

select REPLACE('a b c d', ' ', '')

4、大小写
select UPPER('abCdEfg')
select LOWER('abCdEfg')

5、截取字符串
select LEFT('abcdefg', 5)    返回值 abcde
select RIGHT('abcdefg', 5)   返回值 cdefg
select RIGHT(LEFT('abcdefg', 5), 2)    返回值 de

select SUBSTRING('abcd', 2, 2)    返回值 bc

6、去除空格
select TRIM(' a b c d efg ')    去除左右两侧的空格

7、字符串开始位置
select LOCATE('b', 'a,b,c')    字符位置,返回 3
select FIND_IN_SET('b', 'a,b,c')    逗号分隔的字符串,所在的索引位置,返回 2

8、字符串反转
select REVERSE('abcd')    返回 dcba

4、逻辑判断

1、NULL 处理
select IFNULL('2', '1')    返回 2
select IFNULL(null, '1')   返回 1

5、聚合函数

1、某列平均值
select AVG(age) from sys_user

2、某列非NULL的数量
select COUNT(age) from sys_user

3、最大、最小
select MAX(age) from sys_user
select MIN(age) from sys_user

4、某列之和
select SUM(age) from sys_user

6、NULL 值处理

  • 演示数据
CREATE TABLE `mytest_null_tbl` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(32) DEFAULT NULL COMMENT 'name value',
  `phone` varchar(32) DEFAULT NULL COMMENT 'phone number',
  `age` tinyint(3) unsigned DEFAULT NULL COMMENT 'age value',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='mytest table for null value';

insert into mytest_null_tbl(name,phone,age) values('Lucy','9299008',18);
insert into mytest_null_tbl(name,phone) values('Taylor',0); 
insert into mytest_null_tbl(name,phone) values('Arwiel','');
insert into mytest_null_tbl(name,phone,age) values('Jenifor','5622890',16);
  • 数据截图

  • 数据操作
1、查询 NULL
select * from mytest_null_tbl where age is null

2、处理 NULL 的显示
select name, IFNULL(age, 0) from mytest_null_tbl

3、DISTINCT、GROUP BY 和 ORDER BY,所有的NULL值都被视为相等的,在ORDER BY操作中,NULL值是被做为最小值存在的,ASC时排在最前,DESC时排在最末
select DISTINCT(age) from mytest_null_tbl
select age from mytest_null_tbl GROUP BY age
select age from mytest_null_tbl ORDER BY age

7、IP 地址转换

1、ip 转换为 int
select inet_aton('10.10.1.15')

2、int 转换为 ip
select inet_ntoa(168427791)

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章