Hive SQL如何提取字段中数值前的所有字符?
Hive SQL提取COD列数值前的字符
问题说明
原始COD列数据如下:
| COD |
|---|
| TPP |
| PHONE_9985 |
| SMS@TELL-1256 |
| TEXT@123 |
需要提取每个值中第一个数字出现之前的所有字符,若没有数字则保留原内容,期望结果:
| COD |
|---|
| TPP |
| PHONE |
| SMS@TELL |
| TEXT |
用户尝试的语句未达到预期:
substr(cod, 1, instr(cod, regexp_replace(cod, '[^0-9]','')))
正确实现方案
方法1:使用regexp_extract(推荐)
利用正则正向预查匹配到第一个数字前的内容:
SELECT regexp_extract(COD, '^(.*?)(?=\\d|$)', 1) AS extracted_COD FROM your_table;
^:锚定字符串起始位置(.*?):非贪婪模式捕获任意字符,避免过度匹配(?=\\d|$):正向预查,遇到第一个数字(\\d)或字符串结尾($)时停止,该部分不纳入结果- 参数
1:提取第一个捕获组的内容
方法2:使用regexp_replace
替换掉从第一个数字开始到结尾的所有内容:
SELECT regexp_replace(COD, '\\d.*$', '') AS extracted_COD FROM your_table;
\\d.*$:匹配第一个数字及后续所有字符- 用空字符串替换匹配到的部分,剩余内容即为目标结果
内容的提问来源于stack exchange,提问作者Kiet
相关产品推荐
相关产品推荐

