MySQL 中的 SUBSTRING 和 SUBSTR 函数都是用于从字符串中提取子串的,它们在很多场景下都可以互换使用。虽然这两个函数在基本功能上类似,但在使用上还是有所区别的。以下是这两个函数的详细用法和实战应用。
SUBSTRING 函数
基本语法
SUBSTRING(str, start, length)
str:要提取子串的字符串。start:子串起始的位置(从1开始计数)。length:子串的长度。
如果 start 和 length 中的任何一个参数为 NULL,SUBSTRING() 返回 NULL。
用法示例
假设我们有一个表 employees,包含一个列 name:
CREATE TABLE employees (
id INT AUTO_INCREMENT,
name VARCHAR(50),
PRIMARY KEY (id)
);
INSERT INTO employees (name) VALUES
('John Doe'),
('Jane Smith'),
('Alice Johnson');
现在我们想要获取每个人名字的前三个字符:
SELECT id, SUBSTRING(name, 1, 3) AS initials FROM employees;
输出:
+----+--------+
| id | initials |
+----+--------+
| 1 | Joh |
| 2 | Jan |
| 3 | Ali |
+----+--------+
SUBSTR 函数
基本语法
SUBSTR(str, start, length)
SUBSTR 函数与 SUBSTRING 函数非常相似,区别仅在于参数名称不同。它的参数和用法与 SUBSTRING 函数完全相同。
用法示例
使用 SUBSTR 函数来重复上述 SUBSTRING 函数的示例:
SELECT id, SUBSTR(name, 1, 3) AS initials FROM employees;
输出:
+----+--------+
| id | initials |
+----+--------+
| 1 | Joh |
| 2 | Jan |
| 3 | Ali |
+----+--------+
区别
SUBSTRING 和 SUBSTR 函数在功能上几乎相同,但是它们在不同版本的 MySQL 中有所不同:
- 在 MySQL 3.23 和 MySQL 4.0 中,
SUBSTR函数被弃用,并推荐使用SUBSTRING函数。 - 从 MySQL 4.1 版本开始,
SUBSTR函数成为SUBSTRING函数的别名,这意味着这两个函数现在在所有版本的 MySQL 中都等效。
实战应用
在许多实际应用中,SUBSTRING 和 SUBSTR 函数非常有用。以下是一些常见的场景:
- 提取字符串的子串:例如,提取姓名的缩写或获取电子邮件地址的用户名部分。
- 格式化文本:例如,从日期字符串中提取年份、月份或日。
- 数据分析:例如,在处理时间序列数据时,可能需要从时间戳中提取特定的时间部分。
以下是一些使用这些函数的实战示例:
提取电子邮件地址的用户名
SELECT SUBSTRING(email, 1, INSTR(email, '@') - 1) AS username FROM users;
提取日期字符串中的年份
SELECT SUBSTRING(date_column, 1, 4) AS year FROM my_table;
提取姓名的缩写
SELECT CONCAT(SUBSTRING(name, 1, 1), '. ', SUBSTRING(last_name, 1, 1), '.') AS initials FROM employees;
总结起来,SUBSTRING 和 SUBSTR 函数是 MySQL 中非常强大的字符串处理工具,能够帮助我们在各种场景中轻松提取和处理字符串数据。通过熟练掌握这些函数的用法,我们可以在数据处理和分析方面取得更大的成功。