跳到主要内容

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真题

交流微信二维码

你可能还想看