SQL文本函数
文本函数
在 SQL 中,文本函数用于处理和操作字符串数据。这些函数可以帮助你执行各种字符串相关的操作,如连接字符串、提取子字符串、转换大小写等。以下是一些常用的文本函数及其用法。
1. 字符串连接
CONCAT(string1, string2, ...)
:将多个字符串连接成一个字符串。
2. 字符串长度
LENGTH(string)
:返回字符串的长度(以字节为单位)。CHAR_LENGTH(string)
:返回字符串的长度(以字符为单位)。
对于单字节字符(如 ASCII 字符),LENGTH 和 CHAR_LENGTH 的结果是相同的。但对于多字节字符(如 UTF-8 编码的 Unicode 字符),LENGTH 会返回更多的字节数。
在处理多字节字符时,建议使用 CHAR_LENGTH,因为它能更准确地反映字符串的字符数。
3. 字符串大小写转换
UPPER(string)
:将字符串转换为大写。LOWER(string)
:将字符串转换为小写。
4. 字符串截取
SUBSTRING(string, start, length)
:从字符串中提取子字符串。
5. 字符串替换
REPLACE(string, search, replace)
:在字符串中查找并替换指定的子字符串。
6. 去除空格
TRIM(string)
:去除字符串两端的空格。LTRIM(string)
:去除字符串左端的空格。RTRIM(string)
:去除字符串右端的空格。
7. 字符串比较
STRCMP(string1, string2)
:比较两个字符串,返回 0 表示相等,返回负数表示string1
小于string2
,返回正数表示string1
大于string2
。
示例:
假设有一个 employees
表,包含以下数据:
1 | Alice | Smith |
2 | Bob | Johnson |
3 | Charlie | Brown |
字符串连接
查询每个员工的全名:
SELECT
employee_id,
CONCAT(first_name, ' ', last_name) AS full_name
FROM
employees;
结果:
1 | Alice Smith |
2 | Bob Johnson |
3 | Charlie Brown |
字符串长度
查询每个员工的名字长度:
SELECT
employee_id,
first_name,
LENGTH(first_name) AS length_in_bytes,
CHAR_LENGTH(first_name) AS length_in_characters
FROM
employees;
结果:
1 | Alice | 5 | 5 |
2 | Bob | 3 | 3 |
3 | Charlie | 7 | 7 |
字符串大小写转换
查询每个员工的名字的大写和小写形式:
SELECT
employee_id,
first_name,
UPPER(first_name) AS upper_name,
LOWER(first_name) AS lower_name
FROM
employees;
结果:
1 | Alice | ALICE | alice |
2 | Bob | BOB | bob |
3 | Charlie | CHARLIE | charlie |
字符串截取
查询每个员工名字的前 3 个字符:
SELECT
employee_id,
first_name,
SUBSTRING(first_name, 1, 3) AS substring_name
FROM
employees;
结果:
1 | Alice | Ali |
2 | Bob | Bob |
3 | Charlie | Cha |
字符串替换
查询每个员工名字中的 'a' 替换为 'x':
SELECT
employee_id,
first_name,
REPLACE(first_name, 'a', 'x') AS replaced_name
FROM
employees;
结果:
1 | Alice | Alixe |
2 | Bob | Bob |
3 | Charlie | Chxrxlie |
字符串比较
查询每个员工的名字是否等于 'Alice':
SELECT
employee_id,
first_name,
STRCMP(first_name, 'Alice') AS comparison_result
FROM
employees;
结果:
1 | Alice | 0 |
2 | Bob | 1 |
3 | Charlie | 1 |
去除空格
假设有一个 employees
表,包含以下数据:(由于显示原因,以‘-’表示空格)
1 | --Alice | Smith- |
2 | Bob | --Johnson |
3 | Charlie | Brown |
查询每个员工的名字和姓氏,去除两端的空格:
SELECT
employee_id,
TRIM(first_name) AS trimmed_first_name,
TRIM(last_name) AS trimmed_last_name
FROM
employees;
结果:
1 | Alice | Smith |
2 | Bob | Johnson |
3 | Charlie | Brown |