Impala 提供了 LEFT() 和 RIGHT() 函数来从字符串的左侧或右侧提取指定数量的字符。这两个函数在处理字符串时非常实用。
1. LEFT(str, len)
- 功能:返回字符串
str最左边的len个字符。 - 参数:
str:要处理的源字符串。len:要返回的字符数量(正整数)。
- 返回值:一个新的字符串。
示例
假设我们有一个表 t_names,其中有一列 name:
| name |
|---|
| Alice |
| Bob |
| Charlie |
SELECT
name,
LEFT(name, 1) AS first_letter, -- 提取第一个字符
LEFT(name, 3) AS first_three_letters -- 提取前三个字符
FROM t_names;
结果:
| name | first_letter | first_three_letters |
|---|---|---|
| Alice | A | Ali |
| Bob | B | Bob |
| Charlie | C | Cha |
2. RIGHT(str, len)
- 功能:返回字符串
str最右边的len个字符。 - 参数:
str:要处理的源字符串。len:要返回的字符数量(正整数)。
- 返回值:一个新的字符串。
示例
使用同样的 t_names 表:
SELECT
name,
RIGHT(name, 1) AS last_letter, -- 提取最后一个字符
RIGHT(name, 3) AS last_three_letters -- 提取最后三个字符
FROM t_names;
结果:
| name | last_letter | last_three_letters |
|---|---|---|
| Alice | e | ice |
| Bob | b | Bob |
| Charlie | e | lie |
重要注意事项和行为
-
如果
len大于字符串长度:
函数会返回整个字符串,而不会用空格填充或返回错误。SELECT LEFT('Hi', 10); -- 返回 'Hi' SELECT RIGHT('Hi', 10); -- 返回 'Hi' -
如果
len是 0:
函数会返回一个空字符串。SELECT LEFT('Hello', 0); -- 返回 '' -
如果
len是负数:
Impala 的LEFT()和RIGHT()函数不支持负数的len。如果传入负数,结果将是 NULL。SELECT LEFT('Hello', -2); -- 返回 NULL SELECT RIGHT('Hello', -1); -- 返回 NULL -
如果输入字符串是 NULL:
无论len是多少,结果都是 NULL。SELECT LEFT(NULL, 5); -- 返回 NULL -
与 SUBSTR 的关系:
LEFT(str, n)等价于SUBSTR(str, 1, n)。
RIGHT(str, n)等价于SUBSTR(str, -n)或SUBSTR(str, LENGTH(str) - n + 1)。
实际应用场景
- 提取区号:从一个带括号的电话号码
(123)456-7890中,使用LEFT和字符串定位函数提取123。 - 获取文件扩展名:从文件名
"report.pdf"中,使用RIGHT结合LOCATE或STRPOS来提取"pdf"。 - 数据脱敏:显示身份证号或手机号的后四位,例如
RIGHT(phone_number, 4)得到"*******5678"。
总结
| 函数 | 描述 | 等价于 |
|---|---|---|
LEFT(string, length) | 从字符串开头截取 | SUBSTR(str, 1, len) |
RIGHT(string, length) | 从字符串末尾截取 | SUBSTR(str, -len) |
这两个是 Impala 中进行字符串操作时最基础且最常用的函数之一。
529

被折叠的 条评论
为什么被折叠?



