常用且重要的函数,主要用于数据处理、数据清洗和类型转换。下面我为你详细解释每个函数的功能和典型应用场景。

总结概览

函数 主要用途 形象比喻
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;
```

        通过这些函数的组合使用,你可以有效地对原始数据进行清洗、转换和格式化,使其变得规范、可用。

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐