常用且重要的函数,主要用于数据处理、数据清洗和类型转换。下面我为你详细解释每个函数的功能和典型应用场景。
总结概览
函数 主要用途 形象比喻 TRIM 去除字符串首尾的空格或指定字符 给字符串“剪头发”(去头去尾) CAST 转换数据类型 给数据“换一件衣服”(改变其类型) COALESCE 从参数列表中返回第一个非空值 “备胎”函数,防止出现空值 CHAR_LENGTH 计算字符串的字符个数 字符串的“字符计数器”
---
1. TRIM - 清理字符串
功能: 移除字符串开头和/或结尾的空白字符(如空格、制表符、换行符)或其他指定的字符。
常见语法:
· TRIM(string):移除首尾所有空白字符。 · TRIM(LEADING FROM string):只移除开头的空白。 · TRIM(TRAILING FROM string):只移除结尾的空白。 · TRIM(BOTH ‘x’ FROM string):移除首尾指定的字符 ‘x’。
主要用途:
· 数据清洗:用户输入的数据(如姓名、地址)前后常常带有无意识输入的空格,TRIM 可以标准化这些数据,避免因多余空格导致查询失败或数据不一致。 · 字符串比较:确保比较的字符串没有前后空格干扰。
示例:
```sql SELECT TRIM(' Hello World '); -- 结果:'Hello World' SELECT TRIM(LEADING FROM ' Hello World '); -- 结果:'Hello World ' SELECT TRIM(BOTH '!' FROM '!!Hello World!!'); -- 结果:'Hello World' ```
---
2. CAST - 类型转换
功能: 将一个数据类型的值转换为另一个数据类型。
语法: CAST(expression AS target_data_type)
主要用途:
· 数据类型兼容:当需要在不同数据类型的列之间进行比较或计算时(例如,将字符串‘123’转换成整数再与数字列比较)。 · 格式化输出:确保查询结果以特定的数据类型返回,便于应用程序处理。 · 精确计算:避免整数除法等问题(例如,CAST(column_name AS FLOAT) 来得到小数结果)。
示例:
```sql -- 将字符串转换为整数进行计算 SELECT CAST('123' AS SIGNED) + 5; -- 结果:128
-- 将日期字符串转换为真正的 DATE 类型 SELECT CAST('2023-10-01' AS DATE);
-- 将数字转换为字符串进行拼接 SELECT ‘User’ + CAST(123 AS CHAR); -- 结果:'User123'(在某些数据库中使用 CONCAT 更佳) ```
---
3. COALESCE - 处理空值(NULL)
功能: 接受一个参数列表,返回其中第一个非 NULL 的值。如果所有参数都是 NULL,则返回 NULL。
语法: COALESCE(value1, value2, value3, ...)
主要用途:
· 为 NULL 值提供默认值:这是最常见的用法。当某个字段可能为 NULL 时,用 COALESCE 提供一个备选值,避免在报表或程序中出现空值。 · 多字段优先级选择:从多个可能为空的字段中,按优先级选择一个有值的字段。
示例:
```sql -- 如果 phone_number 为 NULL,则显示 ‘N/A’ SELECT name, COALESCE(phone_number, ‘N/A’) AS contact FROM users;
-- 优先级选择:先看昵称,没有昵称就用本名 SELECT COALESCE(nickname, first_name) AS display_name FROM profiles;
-- 在计算中避免 NULL 污染(任何与 NULL 的计算结果都是 NULL) SELECT price * COALESCE(discount, 1) AS final_price FROM products; -- 如果 discount 是 NULL,则按原价 (price * 1) 计算 ```
---
4. CHAR_LENGTH (或 LENGTH) - 字符串长度
功能: 返回字符串的字符数。
注意: 还有一个函数叫 LENGTH,它返回的是字符串的字节数。对于像中文、日文这样的多字节字符,CHAR_LENGTH 和 LENGTH 的结果会不同。
· CHAR_LENGTH(‘你好’) -> 返回 2(2个字符) · LENGTH(‘你好’) -> 在 UTF-8 编码中返回 6(因为每个中文字符占3个字节)
主要用途:
· 数据验证:验证输入是否符合长度要求(如用户名、密码、验证码)。 · 字符串分析:作为子串操作或其他字符串处理函数的基础。
示例:
```sql SELECT CHAR_LENGTH('Hello'); -- 结果:5 SELECT CHAR_LENGTH('你好世界'); -- 结果:4
-- 验证用户名长度至少为3个字符 SELECT username FROM users WHERE CHAR_LENGTH(username) >= 3; ```
综合运用示例
假设有一个“用户评论”表,我们需要清理数据并生成报告:
```sql SELECT comment_id, -- 清理评论内容,去除首尾空格 TRIM(comment_text) AS cleaned_comment, -- 计算清理后评论的字符长度 CHAR_LENGTH(TRIM(comment_text)) AS comment_length, -- 如果用户昵称为空,则用‘匿名用户’代替 COALESCE(TRIM(nickname), ‘Anonymous‘) AS display_name, -- 将字符串类型的评分转换为数字,以便排序或计算 CAST(rating AS SIGNED INTEGER) AS numeric_rating FROM user_comments; ```
通过这些函数的组合使用,你可以有效地对原始数据进行清洗、转换和格式化,使其变得规范、可用。