目录
1.字符串函数
2.数值函数
3.日期函数
4.流程函数
5.小结
在MySQL中,函数是一种数据库对象,用于执行特定的操作或计算,并返回结果。函数通常用于查询、数据处理和转换,以及在SQL语句中执行其他操作。MySQL提供了许多内置函数,可以用于各种用途。
函数 | 功能 |
---|---|
CONCAT(str1, str2, ...) | 将两个或多个字符串连接成一个字符串 |
LENGTH(str) | 返回字符串的长度(字符数) |
SUBSTRING(str, start, length) | 从字符串中提取子字符串,可以指定起始位置和提取的字符数 |
UPPER(str) | 将字符串转换为大写 |
LOWER(str) | 将字符串转换为小写 |
TRIM([leading | trailing | both] trimstr FROM str) | 去除字符串开头、结尾或两端指定字符(trimstr) |
REPLACE(str, from_str, to_str) | 替换字符串中的特定子字符串 |
LEFT(str, length) | 返回字符串左边指定长度的子字符串 |
RIGHT(str, length) | 返回字符串右边指定长度的子字符串 |
LOCATE(substr, str[, start]) | 查找子字符串(substr)在字符串中的位置 |
INSTR(str, substr) | 返回子字符串在字符串中的位置 |
CHAR_LENGTH(str) | 返回字符串的字符数,而不是字节数 |
REVERSE(str) | 反转字符串中的字符顺序 |
CONCAT_WS(separator, str1, str2, ...) | 将多个字符串连接成一个字符串,使用指定的分隔符(separator)分隔它们 |
LEFT()和RIGHT() | 这两个函数用于从字符串的左边或右边提取指定长度的字符 |
LPAD(str, length, padstr) | 将字符串左填充到指定长度,使用指定的填充字符(padstr) |
RPAD(str, length, padstr) | 将字符串右填充到指定长度,使用指定的填充字符(padstr) |
MID() 或 SUBSTRING() | 用于从字符串中提取子字符串 |
常用的字符串函数
字符串拼接
# 字符串拼接
select concat('mysql',' hello');
返回结果:
转换大小写
# 转换为小写
select lower('DAN');
# 转换为大写
select upper('dog');
左右填充字符串
# 左侧填充
select lpad('11',5,'_');
# 右侧填充
select rpad('11',9,'%');
去除左右空格
# 去除左右空格
select trim(' dag d awd aw');
字符串截取
select substring('hello world',1,7);
SUM(column):计算指定列中所有数值的总和。
AVG(column):计算指定列中所有数值的平均值。
COUNT(column):计算指定列中非NULL值的数量。可以用于计算行数或满足特定条件的行数。
MAX(column):找出指定列中的最大值。
MIN(column):找出指定列中的最小值。
ROUND(number, decimals):将数值四舍五入到指定的小数位数。
CEIL(number):将数值向上取整为最接近的整数。
FLOOR(number):将数值向下取整为最接近的整数。
ABS(number):返回数值的绝对值。
POWER(base, exponent):计算一个数的指定幂次方。
SQRT(number):计算一个数的平方根。
MOD(dividend, divisor):计算两个数相除的余数。
RAND():生成一个介于0和1之间的随机浮点数。
TRUNCATE(number, decimals):截取一个数的小数部分,保留指定的小数位数。
SIGN(number):返回一个数的符号,即1表示正数,-1表示负数,0表示零。
LOG(number):计算一个数的自然对数.
这些数值函数允许你执行各种数学和统计操作,包括求和、平均值、最大值、最小值、取整、绝对值、幂运算、余数计算等。这些函数在数据分析、报表生成、计算和数值处理方面非常有用。
小案例 :通过上面的数值函数,生成一个六位数的随机验证码
思路:采用随机生成函数RAND(),乘以对应的位数,需要考虑到小数点不够的情况,在使用左填充或右填充补齐六位数
select lpad(round((rand()*1000000), 0),6,'0')
NOW():返回当前日期和时间。
CURDATE():返回当前日期。
CURTIME():返回当前时间。
DATE_FORMAT(date, format):将日期按指定格式格式化为字符串。例如,"%Y-%m-%d"表示年-月-日。
DAYNAME(date):返回日期对应的星期几的名称。
MONTHNAME(date):返回日期对应的月份的名称。
DAY(date):返回日期的日部分。
MONTH(date):返回日期的月部分。
YEAR(date):返回日期的年份部分。
HOUR(time):返回时间的小时部分。
MINUTE(time):返回时间的分钟部分。
SECOND(time):返回时间的秒部分。
TIMESTAMPDIFF(unit, start, end):计算两个日期或时间之间的差值,单位可以是秒、分、时、天、月等。
TIMESTAMPADD(unit, interval, date):将指定的时间间隔添加到日期或时间中。
DATE_ADD(date, INTERVAL expr unit):在日期上添加一段时间。
DATE_SUB(date, INTERVAL expr unit):从日期中减去一段时间。
DATEDIFF(end, start):计算两个日期之间的天数差异。
STR_TO_DATE(str, format):将字符串转换为日期,根据指定的格式。
这些日期函数允许你在查询和数据操作中执行各种日期和时间处理操作,如日期格式化、日期计算、日期比较等。你可以根据具体需求选择适当的函数来处理日期和时间数据。
小案例:查询所有员工的入职天数,并根据入职天数进行倒序排序
SELECT employee_id, DATEDIFF(NOW(), hire_date) AS days_since_hire
FROM employees
ORDER BY days_since_hire DESC;
使用
DATEDIFF
函数来计算当前日期(NOW()
)与入职日期之间的天数差,然后将结果按照days_since_hire
字段进行倒序排序,以显示入职天数最长的员工排在前面。
CASE 表达式:用于在SQL查询中实现条件分支逻辑。它有两种主要形式:
简单 CASE 表达式:类似于多个 IF-THEN-ELSE 语句。
CASE expression
WHEN value1 THEN result1
WHEN value2 THEN result2
...
ELSE default_result
END
搜索 CASE 表达式:可以使用更复杂的条件来实现分支逻辑。
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE default_result
END
IF 函数:用于实现条件逻辑,类似于编程语言中的条件语句。它接受一个条件表达式,如果条件为真,则返回一个值;否则返回另一个值。
IF(condition, value_if_true, value_if_false)
COALESCE 函数:从一组表达式中返回第一个非NULL的值。通常用于处理可能为NULL的数据。
COALESCE(expr1, expr2, ...)
NULLIF 函数:如果两个表达式相等,则返回NULL,否则返回第一个表达式的值。用于处理两个表达式的相等性。
NULLIF(expr1, expr2)
常用的函数
1. 字符串函数
CONCAT,LOWER,UPPER,LPAD,RPAD,TEIM,SUNSTRING
2.数值函数
CEIL,FLOOR,MOD,RAND,ROUND
3.日期函数
CURDATE,CURTIME,NOW,YEAR,MONTH,DAY,DATE_ADD,DATEDIFF
4.流程函数
IF,CASE[...] WHEN ... THEN ... ELSE ... END