以下是20个MySQL高频函数,每个函数包含详细的说明、使用场景和示例代码。这些函数涵盖了更复杂的字符串处理、数值计算、日期时间处理、聚合函数等需求。

1. REGEXP 和 RLIKE

说明:使用正则表达式进行模式匹配。
使用场景:复杂字符串匹配,如验证电子邮件格式。
示例代码

SELECT email
FROM users
WHERE email REGEXP '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$';

代码解释:使用正则表达式验证电子邮件格式。

2. SUBSTRING_INDEX()

说明:根据分隔符提取子字符串。
使用场景:提取路径中的文件名或域名。
示例代码

SELECT SUBSTRING_INDEX(url, '/'-1AS filename
FROM files;

代码解释:提取URL中的最后一个部分作为文件名。

3. LPAD() 和 RPAD()

说明:在字符串左侧或右侧填充字符。
使用场景:格式化字符串,如填充数字前导零。
示例代码

SELECT LPAD(price, 10'0'AS padded_price
FROM products;

代码解释:将price字段填充到10位,不足的部分用0填充。

4. TRUNCATE()

说明:截断数值到指定的小数位。
使用场景:精确控制数值的小数位数。
示例代码

SELECT TRUNCATE(price, 1AS truncated_price
FROM products;

代码解释:将price字段截断到一位小数。

5. ABS()

说明:返回数值的绝对值。
使用场景:处理负数。
示例代码

SELECT ABS(balance) AS absolute_balance
FROM accounts;

代码解释:将balance字段的负数转换为正数。

6. FIND_IN_SET()

说明:检查字符串是否在逗号分隔的字符串列表中。
使用场景:验证字符串是否存在于列表中。
示例代码

SELECT NAME 
FROM
  products 
WHERE
  FIND_IN_SET( 'Electronics', categories ) > 0;

代码解释:检查categories字段中是否包含Electronics。

7. POW() 和 SQRT()

说明:计算幂和平方根。
使用场景:数学计算。
示例代码

SELECT POW(2, 3) AS power_result, SQRT(16) AS sqrt_result;

代码解释:计算2的3次方和16的平方根。

8. MOD()

说明:计算余数。
使用场景:判断奇偶数。
示例代码

SELECT MOD(id, 2AS is_odd
FROM employees;

代码解释:判断id字段是否为奇数(1表示奇数,0表示偶数)。

9. GREATEST() 和 LEAST()

说明:返回最大值和最小值。
使用场景:比较多个值。
示例代码

SELECT GREATEST(price1, price2, price3) AS max_price, LEAST(price1, price2, price3) AS min_price
FROM products;

代码解释:返回price1price2price3中的最大值和最小值。

10. TIMESTAMPADD()

说明:向日期或时间添加时间间隔。
使用场景:计算未来的日期或时间。
示例代码

SELECT TIMESTAMPADD(DAY10, order_date) AS future_date
FROM orders;

代码解释:将order_date字段加上10天。

11. DATE_SUB()

说明:从日期或时间减去时间间隔。
使用场景:计算过去的日期或时间。
示例代码

SELECT DATE_SUB(order_date, INTERVAL 1 MONTHAS past_date
FROM orders;

代码解释:将order_date字段减去1个月。

12. YEAR(), MONTH(), DAY()

说明:提取日期中的年、月、日。
使用场景:单独使用日期的某个部分。
示例代码

SELECT YEAR(order_date) AS order_year, MONTH(order_date) AS order_month, DAY(order_date) AS order_day
FROM orders;

代码解释:提取order_date字段的年、月、日。

13. EXTRACT()

说明:从日期或时间中提取部分值。
使用场景:提取日期的特定部分。
示例代码

SELECT EXTRACT(YEAR FROM order_date) AS order_year, EXTRACT(MONTH FROM order_date) AS order_month
FROM orders;

代码解释:提取order_date字段的年和月。

14. UNIX_TIMESTAMP() 和 FROM_UNIXTIME()

说明:转换日期和时间戳。
使用场景:处理时间戳。
示例代码

SELECT UNIX_TIMESTAMP(order_date) AS timestamp, FROM_UNIXTIME(1633072800AS date_from_timestamp
FROM orders;

代码解释:将order_date字段转换为时间戳,将时间戳转换为日期。

15. GROUP BY 和 HAVING

说明:分组和过滤分组结果。
使用场景:统计和过滤分组数据。
示例代码

SELECT category_id, COUNT(*AS product_count
FROM products
GROUP BY category_id
HAVING product_count > 5;

代码解释:统计每个类别的产品数量,并过滤出产品数量大于5的类别。

16. JOIN 操作

说明:连接多个表。
使用场景:获取相关联的数据。
示例代码

SELECT orders.order_id, customers.name
FROM orders
JOIN customers ON orders.customer_id = customers.customer_id;

代码解释:连接orders表和customers表,获取订单ID和客户名称。

17. LEFT JOIN 和 RIGHT JOIN

说明:左连接和右连接。
使用场景:获取左表或右表的所有记录。
示例代码

SELECT orders.order_id, customers.name
FROM orders
LEFT JOIN customers ON orders.customer_id = customers.customer_id;

代码解释:获取所有订单及其对应的客户名称,即使客户不存在。

18. INNER JOIN 和 FULL OUTER JOIN

说明:内连接和全外连接。
使用场景:获取两个表的交集或并集。
示例代码

SELECT orders.order_id, customers.name
FROM orders
INNER JOIN customers ON orders.customer_id = customers.customer_id;

代码解释:获取订单和客户名称的交集。

19. DISTINCT

说明:去除重复记录。
使用场景:获取唯一的记录。
示例代码

SELECT DISTINCT city
FROM customers;

代码解释:获取所有唯一的客户城市。

20. ORDER BY 和 LIMIT

说明:排序和限制结果集。
使用场景:获取排序后的前几条记录。
示例代码

SELECT name, price
FROM products
ORDER BY price DESC
LIMIT 5;

代码解释:按价格降序排列产品,并获取前5条记录。

这些MySQL函数涵盖了更复杂的字符串处理、数值计算、日期时间处理、聚合函数和连接操作。深入理解并熟练运用将使你的SQL写得更加简洁和高效。