startswith:判断字符串前缀
速查结论
startswith(left, right) 是 Spark SQL 中用于判断字符串是否以指定前缀开头的函数。如果 left 以 right 开头则返回 true。注意区分大小写,支持 STRING 和 BINARY 类型。
语法
startswith(left, right)
参数说明
| 参数 | 说明 |
|---|---|
left | 被检查的字符串或二进制表达式 |
right | 要匹配的前缀字符串或二进制表达式 |
返回值:left 以 right 开头时返回 true。任一参数为 NULL 时返回 NULL。
Since: 3.3.0
示例
基础判断
-- 以 'Spark' 开头
SELECT startswith('Spark SQL', 'Spark');
-- 结果: true
-- 以 'SQL' 开头(判断失败)
SELECT startswith('Spark SQL', 'SQL');
-- 结果: false
-- NULL 传播
SELECT startswith('Spark SQL', NULL);
-- 结果: NULL
二进制前缀匹配
-- 二进制前缀匹配
SELECT startswith(x'537061726b2053514c', x'537061726b');
-- 结果: true
SELECT startswith(x'537061726b2053514c', x'53514c');
-- 结果: false
startswith vs endswith vs LIKE 对比
| 函数 | 匹配位置 | 语法 | 适用场景 |
|---|---|---|---|
startswith(str, prefix) | 开头 | 函数 | 检查前缀(如 URL 协议、文件扩展名) |
endswith(str, suffix) | 结尾 | 函数 | 检查后缀(如文件扩展名) |
LIKE 'prefix%' | 开头 | 运算符 | 简单模式匹配 |
-- startswith: 语义最清晰
SELECT startswith('https://example.com', 'https://');
-- LIKE: 等价效果
SELECT 'https://example.com' LIKE 'https://%';
-- endswith: 后缀判断
SELECT endswith('file.csv', '.csv');
常见报错与避坑指南
大小写敏感
startswith 区分大小写,大小写不匹配会返回 false。
-- 错误写法:大小写不一致
SELECT startswith('Spark SQL', 'spark');
-- 结果: false
-- 正确写法:不区分大小写时用 lower/upper
SELECT startswith(lower('Spark SQL'), lower('SPARK'));
-- 结果: true
NULL 传播
任一参数为 NULL 时结果也为 NULL。
-- NULL 导致结果为 NULL
SELECT startswith(NULL, 'abc');
-- 结果: NULL
-- 用 coalesce 防护
SELECT startswith(coalesce(col, ''), 'prefix') FROM t;
📱关注公众号
「数据仓库技术」文章同步更新,不错过每一篇干货

💬加群交流
备注「数据仓库技术」加入社群,每日一道大厂SQL真题
