以下是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, '/', -1) AS 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, 1) AS 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, 2) AS 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;
代码解释:返回price1
, price2
, price3
中的最大值和最小值。
10. TIMESTAMPADD()
说明:向日期或时间添加时间间隔。
使用场景:计算未来的日期或时间。
示例代码:
SELECT TIMESTAMPADD(DAY, 10, order_date) AS future_date
FROM orders;
代码解释:将order_date
字段加上10天。
11. DATE_SUB()
说明:从日期或时间减去时间间隔。
使用场景:计算过去的日期或时间。
示例代码:
SELECT DATE_SUB(order_date, INTERVAL 1 MONTH) AS 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(1633072800) AS 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写得更加简洁和高效。
发表评论 取消回复