假设现在有一个表 tab,如下
with tab as ( select 'abcde' as str )
若想查询`str`字段的第 n 位字符,可以通过 substring 函数完成,函数支持 2~3 个参数。
- 参数1:字段名;
- 参数2:起始位置n,从左往右截取则从 1 开始(注意不是从 0!大部分语言是从 0 开始,如 java String类);从右往左则从 -1 开始;
- 参数3:需要截取的子串长度 m,若 m 超出可截取长度限制,则至多到尾;若不填,则到字串结尾;
1、想要截取出`str`字段的第 1 位
-- 输出:a select substring(str, 1, 1) from tab;
2、想要截取出`str`字段的第 4~5 位
-- 输出:de select substring(str, 4, 2) from tab; select substring(str, 4) from tab; -- 这里`str`字段长度固定为 5 位,则长度指定可省略 select substring(str, -2, 2) from tab; -- 这里`str`字段长度固定为 5 位,则第 4 位也是倒数第 2 位 select substring(str, -2) from tab;
综上,想要截取出`str`字段的最后一位字符,则可
select substring(str, 5, 1) from tab; select substring(str, 5) from tab; select substring(str, length(str)) from tab; -- 若字段长度不固定或未知,则可配合 length 函数动态获取最后一位对应位置
发表评论