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)

 

 

 

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