您好!欢迎访问家园网-www.jy.wang!

家园网

讲一下LEFT(name,1),left是个函数吗

网络 作者:本站 点击:

是的,LEFT 是一个字符串函数


一、LEFT 函数的基本信息

属性说明
类型字符串函数
全称LEFT(左边)
作用从字符串的最左边(开头) 截取指定数量的字符
语法LEFT(字符串, 截取长度)
返回值截取出来的子字符串

二、词源角度

text

LEFT ← 古英语 lyft(弱的、笨的)
         ↓
      现代英语 left(左边的、剩余的)
         ↓
      计算机科学 left(字符串左侧)

为什么用 LEFT 表示“从开头截取”?

因为英语书写习惯是从左到右

  • 字符串的“左边” = 开头

  • 字符串的“右边” = 结尾

所以:

  • LEFT() = 从开头取

  • RIGHT() = 从结尾取

类比:

  • 中文说“前三个字” = 英文说 "left 3 characters"

  • 中文说“后三个字” = 英文说 "right 3 characters"


三、LEFT(name,1) 的含义

sql

LEFT(name, 1)
   │      │  └─ 截取长度:1 个字符
   │      └──── 要截取的字符串:name 列的值
   └─────────── 函数名:从左边开始取

完整意思:

从 name 列的值中,取出最左边的 1 个字符

示例

name 的值LEFT(name,1) 的结果
'张三''张'
'李四''李'
'欧阳锋''欧'
'ABC''A'
'123''1'
'aBcDe''a'
''(空字符串)''(空字符串)
NULLNULL

四、LEFT 函数的家族

SQL Server 中有一族字符串截取函数:

函数作用示例结果
LEFT(字符串, n)从左边取 n 个字符LEFT('Hello', 2)'He'
RIGHT(字符串, n)从右边取 n 个字符RIGHT('Hello', 2)'lo'
SUBSTRING(字符串, 开始, 长度)从指定位置取SUBSTRING('Hello', 2, 3)'ell'

对比示例

sql

DECLARE @name VARCHAR(20) = '欧阳锋';SELECT 
    LEFT(@name, 1)    AS 左边一个,    -- '欧'
    RIGHT(@name, 1)   AS 右边一个,    -- '锋'
    SUBSTRING(@name, 2, 1) AS 中间一个;  -- '阳'


五、LEFT 函数的常见用法

1. 提取首字母/首字符

sql

-- 按姓氏分组SELECT LEFT(name, 1) AS 姓氏, COUNT(*) AS 人数FROM usersGROUP BY LEFT(name, 1);

2. 条件过滤

sql

-- 找出所有姓“张”的人SELECT * FROM usersWHERE LEFT(name, 1) = '张';

3. 数据脱敏(隐藏部分信息)

sql

-- 手机号显示前3位 + **** + 后4位SELECT 
    LEFT(phone, 3) + '****' + RIGHT(phone, 4) AS 脱敏手机号FROM users;

4. 排序(你之前看到的)

sql

-- 按首字符笔画排序SELECT * FROM goodsORDER BY LEFT(goods_name, 1) COLLATE Chinese_PRC_Stroke_CI_AS;


六、注意事项和坑

1. 长度参数不能为负数

sql

-- ❌ 错误:长度不能是负数SELECT LEFT('Hello', -1);-- ✅ 正确SELECT LEFT('Hello', 0);   -- 返回空字符串 ''SELECT LEFT('Hello', 100); -- 长度超过字符串长度,返回完整字符串 'Hello'

2. 处理 NULL

sql

SELECT LEFT(NULL, 1);  -- 返回 NULL

3. 中文字符

sql

-- SQL Server 中,1 个中文也算 1 个字符SELECT LEFT('中华人民共和国', 2);  -- 返回 '中华'

4. 与 LEN 配合

sql

-- 取除了最后一个字符之外的所有字符SELECT LEFT(name, LEN(name) - 1) FROM users;


七、性能考虑

使用场景性能影响
WHERE LEFT(name,1) = '张'❌ 无法使用索引(函数会让索引失效)
WHERE name LIKE '张%'✅ 可以使用索引
ORDER BY LEFT(name,1)❌ 无法使用索引,需要全表排序

优化建议:

sql

-- 不好(函数)SELECT * FROM users WHERE LEFT(name,1) = '张';-- 更好(LIKE 可以利用索引)SELECT * FROM users WHERE name LIKE '张%';


八、总结

问题答案
LEFT 是函数吗?是,字符串函数
词源英语 left(左边),因为英语从左到右书写
作用从字符串开头截取指定数量的字符
语法LEFT(字符串, 长度)
返回值截取出来的子字符串
兄弟函数RIGHT()SUBSTRING()

一句话:LEFT(name,1) 就是从 name 列中取出第一个字符,它是一个简单、常用、但会导致索引失效的字符串函数


标签: