hive一个表中某个字段中包含'微波炉-PM20M2-10094260472269','电热水器+JE8+71051030Z03574+IP词','十字_450十字_搜索快车_10073462994907'等多种类型的数据,怎么把其中的连续数字长度大于等于11的部分取出来
时间: 2024-12-13 07:15:49 浏览: 5
在Hive中,如果你想要从包含多种类型数据的字段中提取出连续的数字,可以使用正则表达式和内置函数`REGEXP_EXTRACT`来实现这个任务。假设该字段名为`product_info`,你可以创建一个新的列来存储提取的结果。以下是一个示例查询:
```sql
CREATE TABLE extracted_numbers AS
SELECT
product_info,
REGEXP_EXTRACT(product_info, '([0-9]+(?:\\.[0-9]+)*)', 1) as numeric_part
FROM
your_table
WHERE
REGEXP_LIKE(product_info, '\\b[0-9]{11,}\\b'); -- 搜索至少11位连续数字
-- 现在`numeric_part`列将包含所有找到的连续11位或更多数字的部分
```
这里,`REGEXP_EXTRACT`函数用于查找匹配正则表达式`([0-9]+(?:\\.[0-9]+)*)`的部分,它匹配一组连续的数字(包括小数点)。`\b`用于表示单词边界,防止误匹配非连续的数字。
相关问题
一个字段中包含'微波炉-PM20M2-10094260472269','电热水器+JE8+71051030Z03574+IP词','十字_450十字_搜索快车_10073462994907',怎么把其中的连续数字长度大于等于11的部分取出来
这些字符串看起来像是商品编号或序列号,要提取其中连续数字长度大于等于11的部分,我们可以分别对每个部分应用正则表达式。每个例子的规律略有不同,但都可以通过相似的步骤完成。
对于微波炉的例子:
- 微波炉-PM20M2-10094260472269: 可以使用`-([0-9]{11,})`来匹配,提取 `-` 后面的连续数字片段。
对于电热水器的例子:
- 电热水器+JE8+71051030Z03574+IP词: 可以尝试`+\w+([0-9]{11,})\+`,注意这里的`\w+`表示字母、数字或下划线,提取`+`两侧的连续数字。
对于“十字_450十字_搜索快车_10073462994907`这样的结构:
- 十字_450十字_搜索快车_10073462994907: 可能只需要最后两个数字,所以可以用`_[^_]+_([0-9]{11,})`来提取。
然后使用Hive的`REGEXP_EXTRACT()`函数来提取这些片段:
```sql
SELECT
REGEXP_EXTRACT('微波炉-PM20M2-10094260472269', '-([0-9]{11,})') AS microwave_code,
REGEXP_EXTRACT('电热水器+JE8+71051030Z03574+IP词', '+\w+([0-9]{11,})\+') AS electric_boiler_code,
REGEXP_EXTRACT('十字_450十字_搜索快车_10073462994907', '_([^_]+)_([0-9]{11,})') AS cross_search_code
FROM your_table;
```
记得替换`your_table`为实际的表名。
阅读全文