MySQL高频函数,使你的SQL更加高效和简洁

云游道人 2025-04-19 580 阅读 0评论

以下是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写得更加简洁和高效。

喜欢就支持以下吧
点赞 0

发表评论

快捷回复: 表情:
aoman baiyan bishi bizui cahan ciya dabing daku deyi doge fadai fanu fendou ganga guzhang haixiu hanxiao zuohengheng zhuakuang zhouma zhemo zhayanjian zaijian yun youhengheng yiwen yinxian xu xieyanxiao xiaoku xiaojiujie xia wunai wozuimei weixiao weiqu tuosai tu touxiao tiaopi shui se saorao qiudale qinqin qiaoda piezui penxue nanguo liulei liuhan lenghan leiben kun kuaikule ku koubi kelian keai jingya jingxi jingkong jie huaixiao haqian aini OK qiang quantou shengli woshou gouyin baoquan aixin bangbangtang xiaoyanger xigua hexie pijiu lanqiu juhua hecai haobang caidao baojin chi dan kulou shuai shouqiang yangtuo youling
提交
评论列表 (有 0 条评论, 580人围观)

最近发表

热门文章

最新留言

热门推荐

标签列表