2025年08月02日/ 浏览 1
在SQL的世界里,LEFT函数就像一位精准的”剪刀手”,能够从字符串的左侧开始,按照我们指定的长度截取需要的部分。它的基础语法非常简单:
sql
LEFT(string_expression, length)
其中:
– string_expression
:要截取的字符串或包含字符串的列
– length
:要截取的字符数(必须是正整数)
例如,我们有一个包含员工姓名的表,想要获取每个姓名的前3个字符:
sql
SELECT LEFT(employee_name, 3) AS name_prefix
FROM employees;
这个查询会返回所有员工姓名的前3个字母,如”Joh”代表”John”、”Mar”代表”Mary”等。
LEFT函数的第二个参数可以是动态计算的,这使得它非常灵活:
sql
SELECT product_name,
LEFT(product_name, CHARINDEX(' ', product_name) - 1) AS first_word
FROM products;
这个例子获取产品名称中的第一个单词(以空格分隔)。
在实际应用中,我们经常会遇到NULL值的情况。LEFT函数本身不会处理NULL,但我们可以结合ISNULL或COALESCE:
sql
SELECT LEFT(ISNULL(customer_name, '无名氏'), 4) AS short_name
FROM customers;
LEFT函数常与其他字符串函数如LEN、SUBSTRING、RIGHT等配合使用:
sql
SELECT
LEFT(email, CHARINDEX('@', email) - 1) AS username,
RIGHT(email, LEN(email) - CHARINDEX('@', email)) AS domain
FROM users;
这个例子将电子邮件地址分割为用户名和域名两部分。
虽然LEFT函数本身性能不错,但在大数据量下仍需注意以下几点:
避免在WHERE子句中过度使用:在WHERE子句中使用LEFT函数会阻止索引使用
WHERE LEFT(column, 3) = 'ABC'
WHERE column LIKE 'ABC%'
考虑计算列:如果频繁需要截取的字符串,可以创建计算列
sql
ALTER TABLE products
ADD first_three_chars AS LEFT(product_name, 3) PERSISTED;
注意字符集:在多语言环境中,LEFT函数可能按字节而非字符截取
假设产品编码前3位代表产品类别:
sql
SELECT
product_id,
product_name,
LEFT(product_code, 3) AS category_code,
CASE LEFT(product_code, 3)
WHEN 'ELC' THEN '电子产品'
WHEN 'CLO' THEN '服装'
WHEN 'FOD' THEN '食品'
ELSE '其他'
END AS category_name
FROM products;
sql
SELECT
user_id,
CONCAT(
LEFT(first_name, 1),
LEFT(last_name, 1)
) AS initials,
email
FROM users;
sql
SELECT
order_id,
LEFT(CONVERT(VARCHAR, order_date, 112), 6) AS year_month
FROM orders;
虽然LEFT函数在大多数SQL数据库中都有实现,但语法可能略有不同:
虽然LEFT函数很方便,但有时其他方法更适合:
SUBSTRING函数:提供更灵活的截取方式
sql
SUBSTRING(string_expression, start, length)
RIGHT函数:从字符串右侧开始截取
sql
RIGHT(string_expression, length)
CHARINDEX/POSITION:结合使用可以找到特定分隔符位置后再截取