mysql/MariaDB学习2.3 mysql常用函数

环境:

CentOS 7,mysql5.7

摘要说明:

本篇文章主要讲述如何使用mysql常用函数;如字符串相关函数、日期格式函数、计算函数等

步骤:

1.数学函数

用于数学计算的函数:

-- ABS(X):返回X的绝对值
select ABS(-32);-- 32

-- MOD(N,M)或%:返回N被M除的余数
select MOD(15,7);-- 1
select 15 % 7; -- 1

-- FLOOR(X):返回不大于X的最大整数值
select FLOOR(1.23); -- 2
select FLOOR(-1.23); -- -2

-- CEILING(X)/ceil(x):返回不小于X的最小整数值
select CEILING(1.23);-- 2 
select CEILING(-1.23); -- -1

ROUND(X) :返回参数X的四舍五入的一个整数。 
select ROUND(1.58); -- 2
select ROUND(-1.58); -- -2

round(x,y):返回数值x带有y为小数结果的数值(四舍五入)
SELECT round(3.1415926,2);-- 3.14

rand():返回随机数
select rand();-- 0.5911854436538978

truncate(x,y):返回数值x截取y位小数的结果(不四舍五入)
select truncate(3.1415926,4);-- 3.1415

2.日期时间函数

用于处理日期时间的函数:

-- curdate()/current_date():获取当前日期
SELECT curdate();-- 2018-08-09
SELECT current_date();-- 2018-08-09

-- curtime()/current_time():获取当前时间
SELECT curtime();-- 15:38:54
SELECT current_time();-- 15:38:54

-- now():获取当前日期时间
select now();-- 2018-08-09 15:40:09

-- month(date),monthname(date):获取日期月份
SELECT MONTH (now());-- 8
SELECT monthname(now());-- August

-- week(date):获取日期周数
select week(now());-- 31

-- year(date):获取日期年数
select year(now());-- 2018

-- hour(time):获取时间时刻
select hour(now());-- 15

-- minute(time):获取时间分钟数
select minute(now());-- 47

-- DAYOFWEEK(date)/DAYNAME(date)/WEEKDAY(date):获取时间星期数
select DAYOFWEEK(NOW());-- 5
select DAYNAME(now());-- Thursday
select WEEKDAY(now());-- 3

-- DATE_ADD(date,INTERVAL expr type)/DATE_SUB(date,INTERVAL expr type):进行日期增加/减少的操作,可以精确到秒
SELECT '2018-08-09'+INTERVAL 1 DAY;-- 2018-08-10
SELECT '2018-08-09'-INTERVAL 1 SECOND;-- 2018-08-08 23:59:59
SELECT DATE_ADD('2018-08-08 23:59:59',INTERVAL 1 SECOND);-- 2018-08-09 00:00:00
SELECT DATE_SUB('2018-08-09 00:01:01',INTERVAL '1:1' MINUTE_SECOND);-- 2018-08-09 00:00:00

-- date_format('time','format')/time_format(time,format):日期时间转换为字符串
select date_format(now(), '%Y%m%d%H%i%s');-- 20180809160315
select time_format(now(),'%H:%i:%s');--16:03:15

-- str_to_date(str, format):字符串转换为日期
select str_to_date('08.09.2018 16:06:30', '%m.%d.%Y %H:%i:%s');-- 2018-08-09 16:06:30

-- makdedate(year,dayofyear)/maketime(hour,minute,second):拼凑日期、时间函数
select makedate(2001,31); -- '2001-01-31'
select makedate(2001,32); -- '2001-02-01'
select maketime(12,15,30); -- '12:15:30'

-- unix_timestamp()/unix_timestamp(date)/from_unixtime(unix_timestamp)/from_unixtime(unix_timestamp,format):Unix 时间戳、日期转换函数
select unix_timestamp(); -- 1533802315
select unix_timestamp(now());-- 1533802315
select from_unixtime(1533802315); -- 2018-08-09 16:11:55
select from_unixtime(1533802315, '%Y%m%d%H%i%s'); -- 20180809161155

3.字符串函数

用于控制字符串函数:

-- ASCII(str):返回字符串str的最左面字符的ASCII代码值。如果str是空字符串,返回0。如果str是NULL,返回NULL
SELECT ASCII("dd");-- 100
SELECT ASCII("dc");-- 100

-- CONCAT(str1,str2,...):返回来自于参数连结的字符串。如果任何参数是NULL,返回NULL。可以有超过2个的参数。一个数字参数被变换为等价的字符串形式
select CONCAT('My', 'S', 'QL'); -- MySQL
select CONCAT('My', NULL, 'QL'); -- NULL
select CONCAT(14.3); -- 14.3

-- LENGTH(str):返回字符串str的字节长度
select LENGTH('text'); -- 4
select LENGTH('字符串');-- 9

-- CHAR_LENGTH(str):用于获取字符串长度
select CHAR_LENGTH('text'); -- 4
select CHAR_LENGTH('字符串');-- 3

-- LOCATE(substr,str):返回子串substr在字符串str第一个出现的位置,如果substr不是在str里面,返回0
select LOCATE('bar', 'foobarbar'); -- 4
select LOCATE('xbar', 'foobar'); -- 0

-- INSTR(str,substr):返回子串substr在字符串str中的第一个出现的位置
select INSTR('foobarbar', 'bar'); -- 4
select INSTR('xbar', 'foobar'); -- 0

-- LEFT(str,len)/RIGHT(str,len):返回字符串str的最左/右面len个字符
select LEFT('foobarbar', 5); -- fooba
select RIGHT('foobarbar', 4); -- rbar

-- SUBSTRING(str,pos):从字符串str的起始位置pos返回一个子串
select SUBSTRING('foobarbar',5);-- arbar

-- TRIM(str):返回字符串str,所有前缀或后缀被删除了
select TRIM(' xbar ');-- xbar

-- LTRIM(str)/RTRIM(str):返回删除了其前/后置空格字符的字符串str。
select LTRIM(' xbar');-- xbar
select RTRIM('xbar ');--xbar

-- REPLACE(str,from_str,to_str):返回字符串str,其字符串from_str的所有出现由字符串to_str代替
select REPLACE('xbar', 'x', 'bar');-- barbar

-- REPEAT(str,count):返回由重复countTimes次的字符串str组成的一个字符串。如果count <= 0,返回一个空字符串。如果str或count是NULL,返回NULL
select REPEAT('bar', 3);-- barbarbar

-- REVERSE(str):返回颠倒字符顺序的字符串str。
select REVERSE('bar');-- rab

-- INSERT(str,pos,len,newstr):返回字符串str,在位置pos起始的子串且len个字符长的子串由字符串newstr代替。 
select INSERT(‘whatareyou', 5, 3, ‘is');-- whatisyou

-- strcmp(str1,str2):用于比较两个字符串的大小。左大于右时返回1,左等于右时返回0,,左小于于右时返回-1
SELECT strcmp('ab','ac');-- -1

-- 大写:upper(x),ucase(x);小写lower(x),lcase(x):字母大小写转换函数;
SELECT UPPER("abc");-- ABC
SELECT UCASE("abc");-- ABC
SELECT LOWER("ABC");-- abc
SELECT LCASE("ABC");-- abc

-- find_in_set(str1,str2):返回字符串str1在str2中的位置,str2包含若干个以逗号分隔的字符串(可以把str2看出一个列表,元素是多个字符串,查找结果是str1在str2这个列表中的索引位置,从1开始)
SELECT FIND_IN_SET('abc','123,456,abc');-- 3

-- field(str,str1,str2,str3…):与find_in_set类似,但str2由一个类似列表的字符串变成了多个字符串,返回str在str1,str2,str3…中的位置。
SELECT FIELD('abc','123','456','abc');-- 3

-- elt(index,str1,str2,str3…):获取指定位置的字符串
SELECT elt(3,'123','456','abc');-- abc


4.逻辑函数

用于进行逻辑控制的函数:

-- CASE value WHEN [compare-value] THEN result [WHEN [compare-value] THEN result ...] [ELSE result] END CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END:在第一个方案的返回结果中, value=compare-value。而第二个方案的返回结果是第一种情况的真实结果。如果没有匹配的结果值,则返回结果为ELSE后的结果,如果没有ELSE 部分,则返回值为 NULL。
SELECT
	CASE 1
WHEN 1 THEN
	2
ELSE
	3
END;-- 2

-- IF(expr1,expr2,expr3):如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL),则 IF()的返回值为expr2; 否则返回值则为 expr3。IF() 的返回值为数字值或字符串值,具体情况视其所在语境而定
SELECT IF(1>2,2,3);-- 3

-- STRCMP(expr1,expr2):如果字符串相同,STRCMP()返回0,如果第一参数根据当前的排序次序小于第二个,返回-1,否则返回1
select STRCMP('text', 'text2');-- -1

-- SELECT IFNULL(expr1,expr2):如果expr1为空则返回expr2否则返回expr1
SELECT IFNULL(1,2);-- 2

5.加密函数

用于进行加密的函数:

-- MD5(str):函数可以对字符串str进行加密。MD5(str)函数主要对普通的数据进行加密。下面使用MD5(str)函数为字符串“abcd”加密
SELECT MD5('abcd');-- e2fc714c4727ee9395f324cd2e7f331f

-- ENCODE(str,pswd_str):函数可以使用字符串pswd_str来加密字符串str。加密的结果是一个二进制数,必须使用BLOB类型的字段来保存它。
SELECT ENCODE("abcd","evan");

-- DECODE(crypt_str,pswd_str)函数可以使用字符串pswd_str来为crypt_str解密。crypt_str是通过ENCODE(str,pswd_str)加密后的二进制数据。字符串pswd_str应该与加密时的字符串pswd_str是相同的。下面使用DECODE(crypt_str,pswd_str)为ENCODE(str,pswd_str)加密的数据解密。
SELECT DECODE(ENCODE("abcd","evan"),"evan");

猜你喜欢

转载自blog.csdn.net/u010904188/article/details/81537293