Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle SQL:提取文本后和delimeter(或其他字符)前的值_Oracle - Fatal编程技术网

Oracle SQL:提取文本后和delimeter(或其他字符)前的值

Oracle SQL:提取文本后和delimeter(或其他字符)前的值,oracle,Oracle,我想在以下问题上得到帮助。我一直很难弄明白怎么做 基本上,我想得到文本''后面的数值;a_限制:“和”;limit:'但仅限于后面的分号 以下是数据的外观: +------------+--------------------------------------------+ | product id | properties | +------------+-------------------------------------

我想在以下问题上得到帮助。我一直很难弄明白怎么做

基本上,我想得到文本''后面的数值;a_限制:“和”;limit:'但仅限于后面的分号

以下是数据的外观:

+------------+--------------------------------------------+
| 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。你用哪一种?