mysql-常用函数(八)

常用函数

数值函数

数值函数是MySQL中一种很重要的函数,主要用于处理数值方面的运算。

求绝对值函数

函数ABS(x)的返回值是数值x的绝对值。正数的绝对值是其本身,负数的绝对值是其相反数。
例:

select abs(5),abs(-5),abs(-5.5);

求余函数

函数MOD(x,y)的返回值是数值x除以数值y后的余数。

  1. 除数和被除数任何一个为NULL,返回结果都将为NULL;
  2. 除数为0将是非法运算,返回结果为NULL。

例:

select mod(6,4),mod(6,-4),mod(null,6),mod(6,0),mod(0,2.5);

用于获取整数的函数

  1. ceil(x): 函数CEIL(x)的返回值是大于数值x的最小整数值
    例:
select ceil(2.45),ceil(-2.45);
  1. floor(x): 函数FLOOR(x)的返回值是小于数值x的最大整数值
    例:
select floor(2.45),floor(-2.45);

获取随机数的函数

函数RAND()的返回值是0~1内的小数,并且每次的运行结果都不同
例:

select rand(),rand(),rand();

四舍五入函数

函数ROUND()的作用是对数值执行四舍五入操作

  1. 当函数格式为ROUND(x)时,返回值为整数;
  2. 当函数格式为ROUND(x,y)时,对数值x进行四舍五入并保留小数点后y位;
    例:
select round(100.144),round(100.568),round(100.144,2),round(100.568,2);

截取小数函数

函数TRUNCATE(x,y)的作用是对数值x进行截取,保留小数点后y位。

直接截取值,并不进行四舍五入
例:

select truncate(1.47,1),truncate(1.584,2),round(1.47,1);

字符串函数

字符串函数是MySQL中使用最频繁的函数,主要用于处理数据库中字符串类型的数据。

返回字符串长度和字符串中字符个数的函数

  1. 函数LENGTH(str)用于返回字符串的长度,一个汉字占用2个字节,一个英文字符和数字占用1个字节。
    例:
select length('abcdef'),length('字符长度');
  1. 函数CHAR_LENGTH(str)用于返回字符串中的字符个数。
    例:
select char_length('abcdef'),char_length('字符长度');

合并字符串的函数

  1. 函数CONCAT(str1,str2…strn)可以将多个字符串拼接成为一个字符串,但如果参数中有一个NULL值,则返回结果都将为NULL。
    例:
select concat('abcd','efg'),concat('abcd',null,'efg');
  1. 函数CONCAT_WS(x,str1,str2…strn)是函数CONCAT(str1,str2…strn)的特殊形式

作用是以第一个参数为分隔符,连接后面的多个字符串。

例:
select concat_ws('_','ab','cd','ef'),concat_ws('_','gh',null,'ij');

函数CONCAT_WS(x,str1,str2…strn)会忽略分隔符后的NULL值,但如果分隔符为NULL,则返回结果为NULL。

替换字符串的函数

  1. 函数INSERT(str,x,y,instr)的作用是将字符串str从第x位置开始,y个字符长的子串替换为字符串instr。
    例:
select insert('beijinglvyoushichang',13,8,'gonglue');
  1. 函数REPLACE(str,a,b)也可以替换字符串,作用是使用字符串b替换字符串str中的子串a。
    例:
select replace('abcabc','abc','you');

字母大小写转换函数

函数LOWER(str)用于将字符串str中的字母全部转换为小写字母
函数UPPER(str)用于将字符串str中的字母全部转换为大写字母。
例:

select lower('aBcD'),upper('aBcD');

获取指定长度字符串的函数

  1. 函数LEFT(str,x)用于获取字符串str中最左边的x个字符
    函数RIGHT(str,x)用于获取字符串str中最右边的x个字符。
    例:
select left('beijinglvyougonglue',7),right('beijinglvyougonglue',7);
  1. 函数SUBSTRING(str,x,y)用于获取字符串str中从x位置开始,后面y个字符长度的子串。该函数常用于在给定字符串中提取子串。
    例:
select substring('beijinglvyougonglue',8,5);
  1. substr(str, pos, len)截取字符串。从pos位置开始对str截取len长度。

填充字符串的函数

  1. 函数LPAD(str1,n,str2)的作用是使用字符串str2对字符串str1最左边进行填充,直到字符串str1总长度达到n个字符长度。如果str1的字符长度大于或等于n,则不填充。
    例:
select lpad('abcefg',5,'km'),lpad('abcefg',10,'km');
  1. 函数RPAD(str1,n,str2)的作用是使用字符串str2对字符串str1最右边进行填充,直到字符串str1总长度达到n个字符长度。
    例:
select rpad('abcdef',5,'km'),rpad('abcdef',10,'km');

删除字符串中空格的函数

  1. 函数LTRIM(str)用于删除字符串左侧的空格字符,
    函数RTRIM(str)用于删除字符串右侧的空格字符。
    例:
select concat('ab',' cd ','ef') as str1,
concat('ab',ltrim(' cd '),'ef') as str2,
concat('ab',' cd ','ef') as str3,
concat('ab',rtrim(' cd '),'ef');
  1. 函数TRIM(str)用于删除字符串开头和结尾的空格,另外,它还可以删除字符串两侧的指定字符。
    例:
SELECT CONCAT('ab',' cd ','ef') AS str1,
CONCAT('ab',TRIM(' cd '),'ef') AS str2, 
TRIM('a' from 'aabacaa') AS str3;

重复生成字符串的函数

函数REPEAT(str,n)返回字符串str重复n次的结果。
例:

SELECT REPEAT('abc ',3);

获取字符串中子串开始位置的函数

函数LOCATE(str1,str)返回子串str1在字符串str中的开始位置,返回值的最小值为1,
如果字符串str中不包含字符串str1,则返回0。
例:

SELECT LOCATE('abc','ababcabd'),LOCATE('efg','ababcabd');
  1. locate(substr, str, start_pos) :从起始位置start_pos开始。返回index索引值。
  2. instr(str, substr):与locate()函数的参数位置相反。返回index索引值。
  3. position(substr in str):返回index索引值。
  4. 扩展知识:find_in_set(substr, str):str需要以逗号分隔。返回index索引值。

反转字符串的函数

函数REVERSE(str)返回将字符串str中字符倒序排列后的结果。
例:

SELECT REVERSE('abcdefg');

截取字符串函数

  1. substring_index(str, delim, count):用于截取字符串

参数:

  • delim是所使用的分隔符。
  • count为正数时,对str截取从左往右直到第count个分隔符,count为负数时,对str截取从右往左直到第count个分隔符。

日期与时间函数

获取当前的日期

current————当前

格式: current_date()

select current_date();
简写: curdate()

select curdate();

获取当前时间的函数

格式:current_time()

select current_time();
简写:curtime()

select curtime();

获取当前日期和时间的函数

格式:now()
select now() as 当前日期;
-- 另外还有:sysdate();同上-select sysdate();

获取unix时间戳函数

时间戳就是从1970开始到现在所过了多少秒(unix系统是1969发明的,所有计算机为了纪念它把1970-1-1设为开始时间)
nuix————nuix系统
timestemp————时间戳

格式:unix_timestamp(date)

select unix_timestamp(now()); -- 到当前时间
select format(unix_timestamp(now()),0); -- 格式化后的...

获取年份、月份、星期、日、时、分和秒的函数

  1. 获取日期的年份 year(date)
select now(),year(now());
select  year('2018-5-9');
  1. 获取日期的月份 month(date)
select month('2020-7-23');
  1. 获取月份的名字 格式:monthname(date)
select monthname('2021-9-10');

外加

  • 获取星期 索引
格式1:weekday(date) -- 星期一0 星期二1 星期三2 ...星期日6
select weekday('2021-4-15');

格式2:dayofweek(date) -- 星期天1 星期一2 ... 星期六7
select dayofweek('2021-5-11');

格式3:weekname(date) -- 获取星期的名字
select now(),dayname(now());
  • 获取当前的周数 --一般来说,一年53周
格式:week(date)
select week(now());

外加格式:weekofyear(date)--在年中是第几周
select weekofyear(now());
  1. 获取小时、分钟、秒
格式分别:hour(date)minute(date)second(date)

select hour('07-01-16 5:17:19') as hour,
minute('07-01-16 5:17:19') as minute,
second('07-01-16 5:17:19') as second;

格式化日期和时间的函数

格式: date_format(date,format);
select date_format('2020-5-11 12:50:30','%Y %m %D %r %S');

计算日期和时间的函数

  1. 时间日期的加减
格式1:adddate(date,interval 数字 单位)--日期和时间加运算
select adddate('2009-1-1',interval 2 year) as date1,
adddate('2009-1-1 06:20:20',interval 2 hour) as date2,
adddate('2009-1-1 06:20:20',interval '10:10' minute_second);

格式:date_add(date,interval 数字 单位)--同上一样
select date_add('2020-1-30',interval 2 day);

用interval 关键字直接实现加减

select '2020-1-30' + interval '2' day;
select '2020-1-30' - interval '2 2' day_hour;

注意:只能year_month/day_hour,day_minute,day_second/hour_minute,minute_second这几个组合

格式2:surdate(date,interval 数字 单位)--日期和时间减运算
select subdate('2009-01-01',interval 2 year) as date1,
subdate('2009-01-01 08:20:20',interval 7 hour) as date2;

格式:date_sub(date,interval 数字 单位) --同上
select date_sub('2020-5-11',interval 2 day);
  1. 两个日期相差天数
格式:datediff(日期1,日期2) --日期1-日期2 得到相差天数
select datediff('2022-02-17',now());
  1. last_day(time)函数返回指定日期对应月份的最后一天。

时间和秒的转换的函数

格式:time_to_sec(date) ———— 时间换算为秒
select time_to_sec('5:28:33');

格式:sec_to_time(date) ———— 秒换算为”hh:mm:ss“的时间格式
select sec_to_time('19713');

条件判断函数

条件判断函数又称为流程控制函数,也是MySQL中使用较多的一种函数。

IF()函数

IF(expr,v1,v2)函数的意义是,如果表达式expr的结果为真,函数的返回值为v1,如果表达式expr的结果为假,则返回值为v2。

例:

select name,price,if(price>50,'high','low') from good;

IFNULL()函数

IFNULL(v1,v2)函数的意义是,如果v1不为NULL,则函数的返回值为v1,否则返回值为v2。

NULL值是不能参与数值运算的,实际应用中常用该函数来替换NULL值

例:

select ifnull(num,0) from good;

CASE函数

格式1: case when 表达式1 then 返回值1 [when 表达式2 then 返回值2] [else 返回值n] end 
例:select case when price>100 then 'high' else 'low' end from good;
格式2: case 表达式 when 表达式1 then1 [when 表达式2 then2] [else 值n] end 
例:select case price when 800 then 'high' when 120 then 'mid' else 'low' end from good;

JSON函数

从MySQL 5.7.8起,开始支持JSON数据类型。JSON函数就是用于处理JSON类型的数据,

创建JSON值的函数

在MySQL中创建JSON值的函数有两个,一个用于创建数组形式的JSON值,另一个用于创建对象形式的JSON值。

  1. 创建JSON数组
格式:json_array(1,2,...,值n)

例:SELECT JSON_ARRAY(1, "abc", null, true,CURTIME());
  1. 创建JSON对象
格式:json_object(对象1,1,对象2,2,...,对象n,值n)

例:SELECT JSON_OBJECT('id', 8, 'name', 'Tom');

修改JSON值的函数

  1. JSON_ARRAY_APPEND(json文档,示键,附加值)

作用:将值附加到JSON文档中指示数组的结尾并返回结果
例:

SET @j = '["a", ["b", "c"], "d"]';
SELECT JSON_ARRAY_APPEND(@j, '$[1]', 1);
  1. JSON_SET(json文档,示键1,值1 [,示键2,值2]…);

作用:JSON文档中插入或更新数据并返回结果
例:

SET @j = '{ "a": 1, "b": [2, 3]}';
SELECT JSON_SET(@j, '$.a', 10, '$.c', '[true, false]');

从JSON文档中删除数据的函数

格式:
JSON_REMOVE(json文档,示键1,删除值1 [,示键2,删除值2]...)

例:
SET @j = '["a", ["b", "c"], "d"]', @h = '{ "a": 1, "b": [2, 3]}';
SELECT JSON_REMOVE(@j, '$[1]'), JSON_REMOVE(@h, '$.a');

返回JSON文档中数据和路径的函数

  1. JSON_EXTRACT()
格式:JSON_EXTRACT (json_doc,key1[,key2]...)
  1. JSON_SEARCH()
格式:JSON_SEARCH (json_doc,one_or_all,str)

其他函数

返回数据库信息的函数

  1. MD5(): 函数MD5(str)可以对字符串str进行加密,算出一个128位二进制形式的信息,但是系统会显示为32位十六进制的信息;若参数为NULL,则返回NULL值。该函数常用于对一些普通的不需要解密的数据进行加密。
例:SELECT MD5('1'),MD5('abc');

注意:
无论输入信息长度为多少,经过处理后,结果均为128位二进制形式的信息,但系统会显示为32位十六进制的信息;
MD5()函数是单向加密,根据输出结果不能反推出输入的信息。

  1. PASSWORD(str): 函数PASSWORD(str)返回字符串str的加密版本,一个41位长的字符串。该函数只用来对系统用户的密码进行设置,但不能对应用的数据进行加密。
例:SELECT PASSWORD('123456');

对不同进制数据进行转换的函数

函数CONV(val,from_base,to_base)用于不同进制数据之间的相互转换,其中,参数val为需要转换的数据,该函数的作用是将其由from_base进制转换为to_base进制。

例:SELECT CONV(15,10,2),CONV('a',16,10),CONV(1111,2,8);

IP地址与数字相互转换的函数

为方便地进行IP或者网段的比较,可以将字符串形式的IP地址转换为数字表示的网络字节序。
这就用到了INET_ATON(IP)函数和INET_NTOA(val)函数。

  1. INET_ATON(IP)
例:SELECT INET_ATON('192.168.220.110');
  1. INET_NTOA(val): 返回网络字节序val代表的IP地址。
例:SELECT INET_NTOA(3232291950);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值