我绝不是开发人员,但我有一些技巧可以拼凑脚本并让它们工作。但是以下似乎远离了我的球场。
我必须在Oracle 12c中的VARCHAR2字段内处理以下内容:
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script src="https://code.highcharts.com/highcharts.js"></script>
<script src="https://code.highcharts.com/modules/exporting.js"></script>
<div id="container" style="min-width: 310px; height: 400px; margin: 0 auto"></div>
我最初认为这是JSON,但我认为这可能只是对象的序列化表示。
无论如何,我需要提取存储在名称等于{
"channel": "Email",
"events": [
{
"attributes": [
{
"isSync": false,
"name": "reportId",
"type": "number",
"value": "87654321"
},
{
"isSync": false,
"name": "subjectLine",
"type": "string",
"value": "Bla bla subject line"
},
{
"isSync": false,
"name": "messageName",
"type": "string",
"value": "bla bla message name"
},
{
"isSync": false,
"name": "docType",
"type": "string",
"value": "html"
},
{
"isSync": false,
"name": "eventId",
"type": "string",
"value": "kTZA01zahw=="
}
],
"code": "emailOptOut",
"namespace": null,
"timestamp": "2018-01-25T09:21:48.085Z",
"version": null
}
],
"identifiers": [
{
"isOriginal": true,
"name": "ENCODED_RECIPIENT_ID",
"value": "Njc5MjM1MS1"
},
{
"isOriginal": true,
"name": "Email",
"value": "foo@bar.com"
}
],
"provider": "Provider",
"source": "Source",
"version": "1",
"Id": "aa-bb-cc-dd"}
的标识符数组中的电子邮件地址("value": "foo@bar.com"
)的值。
我尝试使用"name": "Email"
和json_value
对其进行解析,但失败了,因为我无法提取密钥为json_query
的值。此外,期望值并不总是存储在相同的索引位置,因此我也不能以这种方式定位它。
然后我继续尝试使用Email
,但经过大量搜索StackOverflow和Google后,我找不到任何可以帮助我做到这一点的正则表达式。不幸的是,我完全不了解正则表达式,因此我不得不复制并粘贴并尝试在那里失败。
注意:理想情况下,我可以在SQL语句中运行它,就像视图一样,因为我需要将解析后的数据用作其他内容的起点。
有关如何做到这一点的任何建议?
谢谢!
答案 0 :(得分:0)
您可以使用'n'
的match_parameter REGEXP_SUBSTR
,它允许句点(。)(match-any-character
字符)与newline
字符匹配。
\s*
- 匹配0个或更多空格
.+
- 匹配1个或多个字符,所以
(。+@.+.com)
- 匹配表单<foo>@<bar.com>
的电子邮件ID。
SELECT REGEXP_SUBSTR (
col1,
'"identifiers":.+"name"\s*:\s*"Email".+"value"\s*:\s*"(.+@.+.com)"',
1,
1,
'n',
1)
FROM yourtable;
答案 1 :(得分:0)
如果还不太晚,请使用
之类的东西select jt.*
from (
select '{
"channel": "Email",
"events": [
{
"attributes": [
{
"isSync": false,
"name": "reportId",
"type": "number",
"value": "87654321"
},
{
"isSync": false,
"name": "subjectLine",
"type": "string",
"value": "Bla bla subject line"
},
{
"isSync": false,
"name": "messageName",
"type": "string",
"value": "bla bla message name"
},
{
"isSync": false,
"name": "docType",
"type": "string",
"value": "html"
},
{
"isSync": false,
"name": "eventId",
"type": "string",
"value": "kTZA01zahw=="
}
],
"code": "emailOptOut",
"namespace": null,
"timestamp": "2018-01-25T09:21:48.085Z",
"version": null
}
],
"identifiers": [
{
"isOriginal": true,
"name": "ENCODED_RECIPIENT_ID",
"value": "Njc5MjM1MS1"
},
{
"isOriginal": true,
"name": "Email",
"value": "foo@bar.com"
}
],
"provider": "Provider",
"source": "Source",
"version": "1",
"Id": "aa-bb-cc-dd"}' js
from dual)d,
json_table(d.js, '$.identifiers[*]' columns(name varchar2(20) path '$.name', value varchar2(20) path '$.value' ))jt
where name = 'Email'