oracle—从sql中的内容中提取文本的更好方法是什么?

qpgpyjmq  于 2021-07-29  发布在  Java
关注(0)|答案(2)|浏览(376)

我想知道从oracle数据库中查询和提取文本的最佳方法。
我有个问题:

SELECT
    navigation_url 
FROM
    content_i18n 
    LEFT JOIN
        content 
        ON content_i18n_content_id = content_id 
    LEFT JOIN
        navigation 
        ON content_navigation_id = navigation_id 
WHERE
    content_i18n_text LIKE '%### PHP%' 
    OR content_i18n_extra_text LIKE '%### PHP%' 
    OR content_i18n_custom_slider LIKE '%### PHP%' 
    OR content_i18n_home_slider LIKE '%### PHP%' 
    OR content_i18n_js LIKE '%### PHP%' 
    OR content_i18n_see_also LIKE '%### PHP%'

这个查询返回我的导航网址,但我也想得到之间的文本片段 ### PHP 以及 ### (3#( ### )用于打开和关闭php内容)。如果可能的话,它出现的区域( content_i18n_text , content_i18n_extra_text 等)。
下面的例子来自现场 content_i18n_text 但它也可以来自where子句的每个字段。

"(CLOB) 
<div class="row">
    <div class="col-sm-10 col-sm-offset-1">
        <div class="row">

            <div class="col-sm-6 ">

                ### PHP echo insertar_video_youtube('5joUgy6doRo'); ###
            </div>
            <div class="col-sm-6">
                <p><strong>Text bold</strong>. This is an example .</p>
            </div>
            ### PHP another_funcion_in_php(...)
            $hello = 4
            echo "Hello!"
            ###
        </div>
    </div>
</div>
"

我想得到一个带有导航url的列(已经工作了),另一个列的代码介于“####php”和“####”之间,该名称可能是它出现的字段( content_i18n_text ). 在这个例子中,我有两个匹配的表达式,我如何处理这个?
谢谢!

mrfwxfqh

mrfwxfqh1#

你可以用 regexp_replace() :

select regexp_replace(navigation_url, '^.*### PHP(.*)###.*$', '\1')
zynd9foi

zynd9foi2#

你可以用 replace() 功能,

select replace(navigation_url, '#', '') as navigation_url from content_i18n 
left join content on content_i18n_content_id = content_id
left join navigation on content_navigation_id = navigation_id
where content_i18n_text like '%### PHP%' 
or content_i18n_extra_text like '%### PHP%'
or content_i18n_custom_slider like '%### PHP%'
or content_i18n_home_slider like '%### PHP%'
or content_i18n_js like '%### PHP%'
or content_i18n_see_also like '%### PHP%';

相关问题