hive获取字符串指定位置之前的字符串

在数据表中有一个字段 PROC_DEF_ID_ 数据如下:

AfterSaleWorkSheetProgress:1:3

ReturnToPSPProgress:17:965022

pspOrderCancelWork:15:965017

现在要截取的字段为:

AfterSaleWorkSheetProgress

ReturnToPSPProgress

pspOrderCancelWork

可以使用如下语句:

SELECT SUBSTRING_INDEX(PROC_DEF_ID_,':',1) from ACT_HI_TASKINST;

第一个参数是原字符串,第二个参数是需要截取的目标字符串,第三个参数是目标字符串在原字符串中第几次出现。

### HiveSQL 字符串截取函数及用法 #### substr 和 substring 函数 `substr` 或 `substring` 是用于从给定字符串中提取子字符串的函数。这两个函数功能相同,在使用上可以根据个人习惯选择。 - **语法** - `substr(string A, int start)` 或者 `substr(string A, int start, int length)` - 参数解释: - `A`: 被操作的目标字符串。 - `start`: 子字符串起始位置,支持正负索引。正数表示从左边开始计算的位置;负数则代表从右边算起。 - `length`(可选): 提取出多少字符,默认直到字符串结束为止。 - **实例展示** ```sql SELECT substr('hello world', 1, 5); -- 结果: hello SELECT substr('hello world', -5); -- 结果: world ``` 上述命令分别实现了从向后选取五个字符以及从后往选取最后五个字符的效果[^3]。 #### split 函数配合 array 访问元素方式实现复杂场景下的字符串切割 当面对更复杂的字符串处理需求时,比如按照特定分隔符拆分并获取其中某一部分的内容,则可以考虑采用 `split()` 方法先将整个字符串转换成数组形式再通过下标访问目标片段: - **语法**: `split(string str, string pattern)` - **参数描述**: - `str`: 需要被分割的大字符串; - `pattern`: 定义用来区分各部分的小字符串模式(通常是某种特殊符号),如逗号 `,`. - **组合应用案例** 假设有一个由多个单词组成的列表 `"apple,banana,cherry"` ,现在想要单独拿到第二个水果名称 "banana": ```sql SELECT split('apple,banana,cherry', ',')[1]; -- 输出结果 banana ``` 这里利用了 Hive 的特性可以直接对数组进行索引访问来简化代码逻辑[^2]. #### locate 函数辅助定位特定字符首次出现的位置 如果目的是找到某个子串第一次出现在源字符串中的确切位点以便后续进一步加工的话,那么就可以借助于 `locate()` 来完成这项工作: - **定义**: `locate(substring, string [, position])` - **说明**: - 如果指定了第三个参数position,则会从此处开始搜索而不是默认从头找起; - 返回值为所查到的第一个匹配项所在偏移量加一(即基于人类计数而非计算机科学里的零基地址体系);如果没有发现任何符合条件的结果就给出0作为回应. - **实际运用举例** 为了示范如何结合其他工具共同解决问题,下面这条语句展示了怎样确定字母'o'在单词"hello"里最早显现的地方: ```sql SELECT locate('o', 'hello'); -- 结果应该是 5 因为 o 在第五个位置. ``` 此方法适用于那些需要知道具体坐标的场合,例如准备做精准替换或是裁剪等精细化编辑任务之前[^1].
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值