Oracle SQL:提取文本后和delimeter(或其他字符)前的值
我想在以下问题上得到帮助。我一直很难弄明白怎么做 基本上,我想得到文本''后面的数值;a_限制:“和”;limit:'但仅限于后面的分号 以下是数据的外观:Oracle SQL:提取文本后和delimeter(或其他字符)前的值,oracle,Oracle,我想在以下问题上得到帮助。我一直很难弄明白怎么做 基本上,我想得到文本''后面的数值;a_限制:“和”;limit:'但仅限于后面的分号 以下是数据的外观: +------------+--------------------------------------------+ | product id | properties | +------------+-------------------------------------
+------------+--------------------------------------------+
| product id | properties |
+------------+--------------------------------------------+
| 1 | ;a_limit:99;ccc:1234;limit:1:mmm:xx |
| 2 | ;a_limit:99;bbb:456;ccc:234;limit:15;nnn:0 |
| 5 | ;a_limit:99;limit:5;mmm:null |
+------------+--------------------------------------------+
这就是我希望它看起来的样子:
+------------+---------+-------+
| product id | a_limit | limit |
+------------+---------+-------+
| 1 | 99 | 1 |
| 2 | 100 | 15 |
| 5 | 99 | 5 |
+------------+---------+-------+
当您对单独的值感兴趣时,不应该将值存储在单个字符串中。无论如何:
select
product_id,
to_number(regexp_replace(properties, '^.*;a_limit:([[:digit:]]+).*$', '\1')) as a_limit,
to_number(regexp_replace(properties, '^.*;limit:([[:digit:]]+).*$', '\1')) as limit
from mytable
order by product_id;
REGEXP\u REPLACE
表达式删除字符串中除数字以外的所有内容。如果您对单独的值感兴趣,则不应将值存储在单个字符串中。这不是DBMS应该如何使用的。您标记了MySQL和Oracle,但这是两个不同的DBMS。你用哪一种?