当前位置:网站首页 > 技术博客 > 正文

mysql函数有哪些



函数名称 作 用 ABS 求绝对值 SQRT 求二次方根 MOD 求余数 CEIL 和 CEILING 两个函数功能相同,都是返回不小于参数的最小整数,即向上取整 FLOOR 向下取整,返回值转化为一个BIGINT RAND 生成一个0~1之间的随机数,传入整数参数是,用来产生重复序列 ROUND 对所传参数进行四舍五入 SIGN 返回参数的符号 POW 和 POWER POW 和 POWER SIN 求正弦值 ASIN 求反正弦值,与函数 SIN 互为反函数 COS 求余弦值 ACOS 求反余弦值,与函数 COS 互为反函数 TAN 求正切值 ATAN 求反正切值,与函数 TAN 互为反函数 COT 求余切值
函数名称 作 用 LENGTH 计算字符串长度函数,返回字符串的字节长度 CONCAT 合并字符串函数,返回结果为连接参数产生的字符串,参数可以使一个或多个。如果有任何一个参数为null,则返回值为null INSERT 替换字符串函数 LOWER/UPPER 将字符串中的字母转换为 小写/大写 LEFT 从左侧字截取符串,返回字符串左边的若干个字符 RIGHT 从右侧字截取符串,返回字符串右边的若干个字符 TRIM 删除字符串左右两侧的空格 REPLACE 字符串替换函数,返回替换后的新字符串 SUBSTRING 截取字符串,返回从指定位置开始的指定长度的字符换 REVERSE 字符串反转(逆序)函数,返回与原始字符串顺序相反的字符串
函数名称 作 用 CURDATE 和 CURRENT_DATE 两个函数作用相同,返回当前系统的日期值 CURTIME 和 CURRENT_TIME 两个函数作用相同,返回当前系统的时间值 NOW 和 SYSDATE 两个函数作用相同,返回当前系统的日期和时间值 UNIX_TIMESTAMP 获取UNIX时间戳函数,返回一个以 UNIX 时间戳为基础的无符号整数 FROM_UNIXTIME 将 UNIX 时间戳转换为时间格式,与UNIX_TIMESTAMP互为反函数 MONTH 获取指定日期中的月份 MONTHNAME 获取指定日期中的月份英文名称 DAYNAME 获取指定曰期对应的星期几的英文名称 DAYOFWEEK 获取指定日期对应的一周的索引位置值 WEEK 获取指定日期是一年中的第几周,返回值的范围是否为 0〜52 或 1〜53
函数 描述 实例 ASCII(s) 返回字符串 s 的第一个字符的 ASCII 码。 返回 CustomerName 字段第一个字母的 ASCII 码: CHAR_LENGTH(s) 返回字符串 s 的字符数 返回字符串 RUNOOB 的字符数 CHARACTER_LENGTH(s) 返回字符串 s 的字符数 返回字符串 RUNOOB 的字符数 CONCAT( s1,s2…sn) 合并多个字符串,需要注意,返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL 合并多个字符串,,: CONCAT_WS(x, s1,s2…sn) 同 CONCAT(s1,s2,…) 函数,但是每个字符串之间要加上 x,x 可以是分隔符,需要注意的是分隔符不能为null,如果为null,则返回结果为null 合并多个字符串,并添加分隔符,: FIELD(s,s1,s2…) 返回第一个字符串 s 在字符串列表(s1,s2…)中的位置:从1开始 返回字符串 c 在列表值中的位置: ELT(N,str1,str2,str3,…) 返回对应位置的字符串。如果N = 1,则返回str1;如果N = 2,则返回str2,依此类推。 如果N小于1或大于参数个数,则返回NULL。 ELT是FIELD的补充。 FIND_IN_SET(s1,s2) 返回在字符串s2中与s1匹配的字符串的位置:从1开始 返回字符串 c 在指定字符串中的位置: FORMAT(x,n) 函数可以将数字 x 进行格式化 “#,.”, 将 x 保留到小数点后 n 位,最后一位四舍五入。 格式化数字 “#,.” 形式: INSERT(s1,x,len,s2) 字符串 s2 替换 s1 的 x 位置开始长度为 len 的字符串 从字符串第一个位置开始的 6 个字符替换为 runoob: LOCATE(s1,s) 从字符串 s 中获取 s1 的开始位置 获取 b 在字符串 abc 中的位置: LCASE(s) 将字符串 s 的所有字母变成小写字母 字符串 RUNOOB 转换为小写: LOWER(s) 将字符串 s 的所有字母变成小写字母 字符串 RUNOOB 转换为小写 UCASE(s) 将字符串转换为大写 将字符串 runoob 转换为大写: UPPER(s) 将字符串转换为大写 将字符串 runoob 转换为大写: LEFT(s,n) 返回字符串 s 的前 n 个字符 返回字符串 runoob 中的前两个字符: RIGHT(s,n) 返回字符串 s 的后 n 个字符 返回字符串 runoob 的后两个字符: LPAD(s1,len,s2) 在字符串 s1 的开始处填充字符串 s2,使字符串长度达到 len 将字符串 xx 填充到 abc 字符串的开始处: RPAD(s1,len,s2) 在字符串 s1 的结尾处添加字符串 s2,使字符串的长度达到 len 将字符串 xx 填充到 abc 字符串的结尾处: TRIM(s) 去掉字符串 s 开始和结尾处的空格 去掉字符串 RUNOOB 的首尾空格: LTRIM(s) 去掉字符串 s 左侧的空格 去掉字符串 RUNOOB开始处的空格: RTRIM(s) 去掉字符串 s 结尾处的空格 去掉字符串 RUNOOB 的末尾空格:·SELECT RTRIM("RUNOOB ") AS RightTrimmedString; – RUNOOB· MID(s,n,len) 从字符串 s 的 n 位置截取长度为 len 的子字符串,同 SUBSTRING(s,n,len) 从字符串 RUNOOB 中的第 2 个位置截取 3个 字符 POSITION(s1 IN s) 从字符串 s 中获取 s1 的开始位置 返回字符串 abc 中 b 的位置: REPEAT(s,n) 将字符串 s 重复 n 次 将字符串 runoob 重复三次: REPLACE(s,s1,s2) 将字符串 s2 替代字符串 s 中的字符串 s1 将字符串 abc 中的字符 a 替换为字符 x: REVERSE(s) 将字符串s的顺序反过来 将字符串 abc 的顺序反过来: SPACE(n) 返回 n 个空格 返回 10 个空格: STRCMP(s1,s2) 比较字符串 s1 和 s2,如果 s1 与 s2 相等返回 0 ,如果 s1>s2 返回 1,如果 s1<s2 返回 -1 比较字符串: SUBSTR(s, start, length) 从字符串 s 的 start 位置截取长度为 length 的子字符串 从字符串 RUNOOB 中的第 2 个位置截取 3个 字符 SUBSTRING(s, start, length) 从字符串 s 的 start 位置截取长度为 length 的子字符串 从字符串 RUNOOB 中的第 2 个位置截取 3个 字符: SUBSTRING_INDEX(s, delimiter, number) 返回从字符串 s 的第 number 个出现的分隔符 delimiter 之后的子串。如果 number 是正数,返回第 number 个字符左边的字符串。如果 number 是负数,返回第(number 的绝对值(从右边数))个字符右边的字符串。
函数名 描述 实例 ABS(x) 返回 x 的绝对值 返回 -1 的绝对值: ACOS(x) 求 x 的反余弦值(参数是弧度) ASIN(x) 求反正弦值(参数是弧度) ATAN(x) 求反正切值(参数是弧度) ATAN2(n, m) 求反正切值(参数是弧度) AVG(expression) 返回一个表达式的平均值,expression 是一个字段 返回 Products 表中Price 字段的平均值 CEIL(x) 返回大于或等于 x 的最小整数 CEILING(x) 返回大于或等于 x 的最小整数 FLOOR(x) 返回小于或等于 x 的最大整数 小于或等于 1.5 的整数: COS(x) 求余弦值(参数是弧度) COT(x) 求余切值(参数是弧度) COUNT(expression) 返回查询的记录总数,expression 参数是一个字段或者 * 号 返回 Products 表中 products 字段总共有多少条记录: DEGREES(x) 将弧度转换为角度 n DIV m 整除,n 为被除数,m 为除数 计算 10 除于 5: EXP(x) 返回 e 的 x 次方 计算 e 的三次方 GREATEST(expr1, expr2, expr3, …) 返回列表中的最大值 返回以下数字列表中的最大值:返回以下字符串列表中的最大值: LEAST(expr1, expr2, expr3, …) 返回列表中的最小值 返回以下数字列表中的最小值:返回以下字符串列表中的最小值: LN 返回数字的自然对数,以 e 为底。 返回 2 的自然对数: LOG(x) 或 LOG(base, x) 返回自然对数(以 e 为底的对数),如果带有 base 参数,则 base 为指定带底数。 LOG10(x) 返回以 10 为底的对数 LOG2(x) 返回以 2 为底的对数 返回以 2 为底 6 的对数: MAX(expression) 返回字段 expression 中的最大值 返回数据表 Products 中字段 Price 的最大值 MIN(expression) 返回字段 expression 中的最小值 返回数据表 Products 中字段 Price 的最小值 MOD(x,y) 返回 x 除以 y 以后的余数 5 除于 2 的余数: PI() 返回圆周率(3.) POW(x,y) 返回 x 的 y 次方 2 的 3 次方: POWER(x,y) 返回 x 的 y 次方 2 的 3 次方: RADIANS(x) 将角度转换为弧度 180 度转换为弧度: RAND() 返回 0 到 1 的随机数 ROUND(x,y) 返回离 y位数 最近的整数(四舍五入) TRUNCATE(x,y) 返回数值 x 保留到小数点后 y 位的值(与 ROUND 最大的区别是不会进行四舍五入) SIGN(x) 返回 x 的符号,x 是负数、0、正数分别返回 -1、0 和 1 SIN(x) 求正弦值(参数是弧度) SQRT(x) 返回x的平方根 25 的平方根: SUM(expression) 返回指定字段的总和 计算 OrderDetails 表中字段 Quantity 的总和: TAN(x) 求正切值(参数是弧度)
函数名 描述 实例 ADDDATE(d,n) 计算起始日期 d 加上 n 天的日期 ADDTIME(t,n) n 是一个时间表达式,时间 t 加上时间表达式 n 加 5 秒: 添加 2 小时, 10 分钟, 5 秒: CURDATE() 返回当前日期 CURRENT_DATE() 返回当前日期 CURRENT_TIME 返回当前时间 CURRENT_TIMESTAMP() 返回当前日期和时间 CURTIME() 返回当前时间 DATE() 从日期或日期时间表达式中提取日期值 DATEDIFF(d1,d2) 计算日期 d1->d2 之间相隔的天数 DATE_ADD(d,INTERVAL expr type) 计算起始日期 d 加上一个时间段后的日期,type 值可以是:https://www.runoob.com/mysql/mysql-functions.html DATE_FORMAT(d,f) 按表达式 f的要求显示日期 d `SELECT DATE_FORMAT(‘2011-11-11 11:11:11’,‘%Y-%m-%d %r’)-> DATE_SUB(date,INTERVAL expr type) 函数从日期减去指定的时间间隔。 Orders 表中 OrderDate 字段减去 2 天: DAY(d) 返回日期值 d 的日期部分 DAYNAME(d) 返回日期 d 是星期几,如 Monday,Tuesday DAYOFMONTH(d) 计算日期 d 是本月的第几天 DAYOFWEEK(d) 日期 d 今天是星期几,1 星期日,2 星期一,以此类推 DAYOFYEAR(d) 计算日期 d 是本年的第几天 EXTRACT(type FROM d) 从日期 d 中获取指定的值,type 指定返回的值。type可取值为:https://www.runoob.com/mysql/mysql-functions.html FROM_DAYS(n) 计算从 0000 年 1 月 1 日开始 n 天后的日期 HOUR(t) 返回 t 中的小时值 LAST_DAY(d) 返回给给定日期的那一月份的最后一天 LOCALTIME() 返回当前日期和时间 LOCALTIMESTAMP() 返回当前日期和时间 MAKEDATE(year, day-of-year 基于给定参数年份 year 和所在年中的天数序号 day-of-year 返回一个日期 MAKETIME(hour, minute, second) 组合时间,参数分别为小时、分钟、秒 MICROSECOND(date) 返回日期参数所对应的微秒数 MINUTE(t) 返回 t 中的分钟值 MONTHNAME(d) 返回日期当中的月份名称,如 November MONTH(d) 返回日期d中的月份值,1 到 12 NOW() 返回当前日期和时间 PERIOD_ADD(period, number) 为 年-月 组合日期添加一个时段 PERIOD_DIFF(period1, period2) 返回两个时段之间的月份差值 QUARTER(d) 返回日期d是第几季节,返回 1 到 4 SECOND(t) 返回 t 中的秒钟值 SEC_TO_TIME(s) 将以秒为单位的时间 s 转换为时分秒的格式 STR_TO_DATE(string, format_mask) 将字符串转变为日期 SUBDATE(d,n) 日期 d 减去 n 天后的日期 SUBTIME(t,n) 时间 t 减去 n 秒的时间 SYSDATE() 返回当前日期和时间 TIME(expression) 提取传入表达式的时间部分 TIME_FORMAT(t,f) 按表达式 f 的要求显示时间 t TIME_TO_SEC(t) 将时间 t 转换为秒 TIMEDIFF(time1, time2) 计算时间差值 TIMESTAMP(expression, interval) 单个参数时,函数返回日期或日期时间表达式;有2个参数时,将参数加和 TO_DAYS(d) 计算日期 d 距离 0000 年 1 月 1 日的天数 WEEK(d) 计算日期 d 是本年的第几个星期,范围是 0 到 53 WEEKDAY(d) 日期 d 是星期几,0 表示星期一,1 表示星期二 WEEKOFYEAR(d) 算日期 d 是本年的第几个星期,范围是 0 到 53 YEAR(d) 返回年份 YEARWEEK(date, mode) 返回年份及第几周(0到53),mode 中 0 表示周天,1表示周一,以此类推 TIMESTAMPDIFF 计算两个日期相差的天数、月数、年数 SELECT TIMESTAMPDIFF(类型,开始时间,结束时间)

在这里插入图片描述

 
  
函数名 描述 实例 BIN(x) 返回 x 的二进制编码 15 的 2 进制编码: BINARY(s) 将字符串 s 转换为二进制字符串 CASE when THEN else end CASE 表示函数开始,END 表示函数结束。如果 condition1 成立,则返回 result1, 如果 condition2 成立,则返回 result2,当全部不成立则返回 result,而当有一个成立之后,后面的就不执行了。 CAST(x AS type) 转换数据类型 字符串日期转换为日期: 字符串转换为数字 COALESCE(expr1, expr2, …, expr_n) 返回参数中的第一个非空表达式(从左向右) CONNECTION_ID() 返回唯一的连接 ID CONV(x,f1,f2) 返回 f1 进制数变成 f2 进制数 CONVERT(s USING cs) 函数将字符串 s 的字符集变成 cs CURRENT_USER() 返回当前用户 DATABASE() 返回当前数据库名 IF(expr,v1,v2) 如果表达式 expr 成立,返回结果 v1;否则,返回结果 v2。 IFNULL(v1,v2) 如果 v1 的值不为 NULL,则返回 v1,否则返回 v2。 ISNULL(expression) 判断表达式是否为 NULL LAST_INSERT_ID() 返回最近生成的 AUTO_INCREMENT 值 NULLIF(expr1, expr2) 比较两个字符串,如果字符串 expr1 与 expr2 相等 返回 NULL,否则返回 expr1 SESSION_USER() 返回当前用户 SYSTEM_USER() 返回当前用户 USER() 返回当前用户 VERSION() 返回数据库的版本号

1、功能:将group by产生的同一个分组中的值连接起来,返回一个字符串结果。
2、语法:group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator ‘分隔符’] )
说明:通过使用distinct可以排除重复值;如果希望对结果中的值进行排序,可以使用order by子句;separator是一个字符串值,缺省为一个逗号。

MySql数据库查询时,使用group_concat报错“Row XXX was cut by GROUP_CONCAT()”,单独查询不会报错,当我要查询的数据更新到另外个表中的字段时,会报这个错,网上查了下是因为GROUP_CONCAT有个最大长度的限制,超过最大长度就会被截断掉,可以通过

 
  
 
  

在这里插入图片描述

 
  

在这里插入图片描述

binary:二进制类型;
char:字符类型;
date:日期类型;
time:时间类型;
datetime:日期时间类型;
decimal:浮点型;
signed:整型;
unsigned:无符号整型。






  • replace into 表名l (id,字段1) values (1,‘2’),(2,‘3’),…(x,‘y’);
  • insert into 表名 values(列值1,列值2,列值3…) on duplicate key update 列名1=值/values(列名1),列名2=列值/valules(列名2)…

二者结论:

1:唯一性索引冲突时,两种方式都会增加数据表AUTO_INCREMENT的值。

2:replace遇到主键/唯一索引冲突是先删除再插入,无冲突直接进行insert。

总结从上面的测试结果看出,相同之处:
(1),没有key的时候,replace与insert … on deplicate key udpate相同。
(2),有key的时候,都保留主键值,并且auto_increment自动+1
不同之处:有key的时候,replace是delete老记录,而录入新的记录,所以原有的所有记录会被清除,这个时候,如果replace语句的字段不全的话,有些原有的比如例子中c字段的值会被自动填充为默认值。


注意事项:

ON DUPLICATE KEY 如果a=1 OR b=2与多个行向匹配,则只有一个行被更新。通常,您应该尽量避免对带有多个唯一关键字的表使用ON DUPLICATE KEY子句。

REPLACE可能影响3条以上的记录,这是因为在表中有超过一个的唯一索引。在这种情况下,REPLACE将考虑每一个唯一索引,并对每一个索引对应的重复记录都删除,然后插入这条新记录。假设有一个table1表,有3个字段a, b, c。它们都有一个唯一索引。

您可以在UPDATE子句中使用VALUES(col_name)函数从INSERT…UPDATE语句的INSERT部分引用列值。换句话说,如果没有发生重复关键字冲突,则UPDATE子句中的VALUES(col_name)可以引用被插入的col_name的值。本函数特别适用于多行插入。VALUES()函数只在INSERT…UPDATE语句中有意义,其它时候会返回NULL。

 
  

参考博客 https://blog.csdn.net/taoy86/article/details/

ELT(N,str1,str2,str3,…)

 
  
 
  

1)语法:substring_index(string,sep,num)即substring_index(字符串,分隔符,序号)

参数说明

string:用于截取目标字符串的字符串。可为字段,表达式等。

sep:分隔符,string存在且用于分割的字符,比如“,”、“.”等。

num:序号,为非0整数。若为整数则表示从左到右数,若为负数则从右到左数。比如“www.mysql.com”截取字符‘www’,分割符为“.”,从左到右序号为1,即substring_index(“www.mysql.com”,‘.’,1);若从右开始获取“com”则为序号为-1即substring_index(“www.mysql.com”,‘.’,-1)
2)用于截取目标字符串。
例:现有一个学生信息表student,详细地址address储存省、市、县等由逗号隔开的地址信息,比如“XX省,XX市,XX区,…,XXX号”。由于某种原因没有学生所在省信息需要获取,同时获取学生姓名name,性别sex,年龄age。

 
  

                            

版权声明


相关文章:

  • 内连接和外连接的区别SQL2025-08-13 17:30:00
  • chmod修改文件夹权限2025-08-13 17:30:00
  • memtest86 4.2和5.0区别2025-08-13 17:30:00
  • mipi dsi接口定义2025-08-13 17:30:00
  • springboot获取application.yml的值2025-08-13 17:30:00
  • 单例设计模式例子2025-08-13 17:30:00
  • ifstream.read()2025-08-13 17:30:00
  • 137、138端口怎么关闭?2025-08-13 17:30:00
  • linux系统版本怎么查2025-08-13 17:30:00
  • pytest与unittest框架原理2025-08-13 17:30:00