在 SQL 中,有许多高效、简洁的函数可用于数据处理、查询优化和数据转换。
以下是一些常见的 SQL 函数及其详细中文解释、示例和总结:
1. COALESCE
-
作用:
COALESCE
函数从左到右依次检查其参数,并返回第一个非空的值。如果所有参数都为空,则返回NULL
。 -
应用场景:可以在处理缺失数据时使用,尤其是多个字段可能为空的情况下,可以选择一个优先级最高的非空值。
示例:
SELECT COALESCE(phone, mobile, email) AS contact_info FROM customers;
解释:如果
phone
为空,COALESCE
返回mobile
的值;如果mobile
也为空,则返回email
的值。
2. NULLIF
-
作用:
NULLIF
函数用于比较两个表达式,如果相等则返回NULL
,否则返回第一个表达式的值。 -
应用场景:在计算中忽略某些默认值,例如在除法运算中忽略零值,避免产生错误。
示例:
SELECT price / NULLIF(discount, 0) AS final_price FROM products;
解释:如果
discount
为0
,则返回NULL
,避免了除以零的错误。
3. CONCAT
和 CONCAT_WS
-
作用:
CONCAT
将多个字符串连接成一个字符串。CONCAT_WS
(with separator)允许指定分隔符。 -
应用场景:字符串拼接操作,例如生成全名、地址等。
示例:
SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM employees; SELECT CONCAT_WS(', ', city, state, country) AS full_address FROM locations;
解释:第一个示例将名字和姓氏拼接为全名,第二个示例将地址的各个字段拼接为一个完整地址,并使用逗号作为分隔符。
4. IFNULL
和 ISNULL
-
作用:
IFNULL
和ISNULL
函数用于替换NULL
值。IFNULL
在指定值为NULL
时返回另一个值,ISNULL
返回一个布尔值表示是否为NULL
。 -
应用场景:处理可能为
NULL
的字段,避免空值影响计算结果或显示结果。示例:
SELECT IFNULL(phone, '未提供') AS contact_number FROM customers; SELECT ISNULL(phone) AS is_phone_missing FROM customers;
解释:
IFNULL
将NULL
值替换为“未提供”,ISNULL
检查phone
是否为NULL
。
5. ROUND
、CEIL
和 FLOOR
-
作用:
ROUND
将数值四舍五入到指定的小数位数,CEIL
返回大于等于指定数值的最小整数,FLOOR
返回小于等于指定数值的最大整数。 -
应用场景:用于处理金额、评分等数值数据的精度,或计算整数范围。
示例:
SELECT ROUND(price, 2) AS rounded_price FROM products; SELECT CEIL(average_score) AS ceil_score, FLOOR(average_score) AS floor_score FROM scores;
解释:
ROUND
将price
保留两位小数,CEIL
和FLOOR
将average_score
分别向上或向下取整。
6. DATE_ADD
和 DATE_SUB
-
作用:
DATE_ADD
和DATE_SUB
函数用于在日期上增加或减少指定的时间间隔(天、月、年等)。 -
应用场景:处理日期计算,如计算合同有效期、会员到期日等。
示例:
SELECT DATE_ADD(order_date, INTERVAL 7 DAY) AS delivery_date FROM orders; SELECT DATE_SUB(subscription_date, INTERVAL 1 MONTH) AS previous_month FROM subscriptions;
解释:第一个查询计算订单的预计送达日期(加7天),第二个查询计算前一个月的日期。
7. DATEDIFF
-
作用:
DATEDIFF
计算两个日期之间的天数差。 -
应用场景:用于分析时间间隔,如计算订单处理时间、任务完成时间等。
示例
SELECT DATEDIFF(delivery_date, order_date) AS processing_days FROM orders;
解释:计算每笔订单的处理天数,返回两个日期之间的天数差。
8. UPPER
和 LOWER
-
作用:
UPPER
将字符串转换为大写,LOWER
将字符串转换为小写。 -
应用场景:规范化文本数据,使其不受大小写影响,例如搜索、数据清洗等。
示例:
SELECT UPPER(last_name) AS uppercase_name, LOWER(email) AS lowercase_email FROM employees;
释:将员工姓氏转换为大写、电子邮件转换为小写。
9. SUBSTRING
-
作用:
SUBSTRING
从指定位置开始,提取字符串的部分内容。 -
应用场景:从字符串中提取子串,例如提取用户名、订单编号前缀等。
示例:
SELECT SUBSTRING(email, 1, POSITION('@' IN email) - 1) AS username FROM users;
解释:提取
email
字符串中@
前的部分,作为用户名。
10. CASE WHEN
-
作用:
CASE WHEN
是 SQL 中的条件判断函数,可用于基于不同条件返回不同的结果。 -
应用场景:用于实现复杂的条件判断和分类操作,例如对成绩分级、分类统计等。
示例:
SELECT name, CASE WHEN score >= 90 THEN '优秀' WHEN score >= 75 THEN '良好' WHEN score >= 60 THEN '合格' ELSE '不合格' END AS grade FROM students;
解释:根据
score
字段的值,判断学生成绩的等级。
总结
这些 SQL 函数为数据处理和操作提供了丰富的工具集,有助于提高数据查询的简洁性和效率。它们适用于数据的清洗、转换、条件判断和计算等多种场景。选择合适的函数,可以使 SQL 语句更加简洁、易读,同时提升数据库的处理性能。