Sql 删除列中的某些值

Sql 删除列中的某些值,sql,xml,oracle,sql-update,Sql,Xml,Oracle,Sql Update,我想删除列中的某些值,我有一个包含以下内容的列定义,例如: <listdef page="25" default_order="entity" default_order_type="a"><reportId>1332</reportId><name>test</name><description>test</description><multiProduct>N</multiProduct&g

我想删除列中的某些值,我有一个包含以下内容的列定义,例如:

<listdef page="25" default_order="entity" default_order_type="a"><reportId>1332</reportId><name>test</name><description>test</description><multiProduct>N</multiProduct><product_code>BG,</product_code><equivalentCurrency>EUR</equivalentCurrency><use_absolute_width>Y</use_absolute_width><column name="ref_id"><description locale="fr">Système Id</description></column><column name="iss_date"><description locale="fr">Date d'émission</description></column><column name="exp_date"><description locale="fr">Date de Validité</description></column><column name="bg_amt"><description locale="fr">Montant de la Garantie Bancaire</description></column><column name="applicant_name"><description locale="fr">Nom du donneur d'ordre</description></column><column name="entity"><description locale="fr">Entité</description></column><column name="applicant_reference"><description locale="fr">Référence du donneur d'ordre</description></column><column width="5%" name="action"><url action="y"><parameter column="ref_id" name="REFERENCE_ID"/><parameter column="product_code" name="PRODUCT_CODE"/><parameter binding_code="HISTORY" name="OPTION_CODE"/><parameter binding_code="LIST_INQUIRY" name="OPERATION_CODE"/><parameter value="TRADEADMIN_SCREEN" name="SCREEN"/></url></column><column name="bg_liab_amt" hidden="y"/><column name="ref_id" hidden="y"/><column name="product_code" hidden="y"/><column name="ref_id" hidden="y"/><parameter input="y" name="ENTITE" size="" max_length=""><description locale="fr">ENTITE</description></parameter><parameter input="y" name="TIERS" size="" max_length=""><description locale="fr">TIERS</description></parameter><parameter name="export_list" file="stock CBC" type="export" file_name="stock CBC"/><candidate name="BG"><filter><criteria><column name="entity" type="String"/><operator type="like"/><value type="parameter">ENTITE</value></criteria><criteria><column name="applicant_reference" type="String"/><operator type="like"/><value type="parameter">TIERS</value></criteria></filter></candidate><aggregate type="count"><column name="ref_id"/><description locale="fr">Nombre de dossiers</description></aggregate><aggregate type="sum" cur="EUR"><column name="bg_liab_amt"/><description locale="fr">Total encours</description></aggregate><executable_flag>Y</executable_flag></listdef>
1332测试NBG,欧洲银行监管机构(EURYSystème IdDate d'missionDate de'ValiditéMontant de la Garantie BancaireNom du donneur d'ordreenitiers du donneur d'ordreenitiersentiers du donneur d'ordreenitiers du dom dotal encours
我想删除此部分并保留其余部分:

<column width="5%" name="action"><url action="y"><parameter column="ref_id" name="REFERENCE_ID"/><parameter column="product_code" name="PRODUCT_CODE"/><parameter binding_code="HISTORY" name="OPTION_CODE"/><parameter binding_code="LIST_INQUIRY" name="OPERATION_CODE"/><parameter value="TRADEADMIN_SCREEN" name="SCREEN"/></url></column>

您可以同时使用
regexp\u substr()
replace()
函数:

select replace( str, 
                regexp_substr(str,'(<column width="5%")(.*)(</url></column>)')
              ) as "Extracted String"
  from tab 
选择替换(str,

regexp_substr(str),(您可以同时使用
regexp_substr()
replace()
函数:

select replace( str, 
                regexp_substr(str,'(<column width="5%")(.*)(</url></column>)')
              ) as "Extracted String"
  from tab 
选择替换(str,

regexp_substr(str),(您可以使用
INSTR
substr
函数的组合来实现它,如下所示:

WITH YOUR_TABLE(YOUR_COL) AS
(SELECT
    q'{<listdef page="25" default_order="entity" default_order_type="a"><reportId>1332</reportId><name>test</name><description>test</description><multiProduct>N</multiProduct><product_code>BG,</product_code><equivalentCurrency>EUR</equivalentCurrency><use_absolute_width>Y</use_absolute_width><column name="ref_id"><description locale="fr">Système Id</description></column><column name="iss_date"><description locale="fr">Date d'émission</description></column><column name="exp_date"><description locale="fr">Date de Validité</description></column><column name="bg_amt"><description locale="fr">Montant de la Garantie Bancaire</description></column><column name="applicant_name"><description locale="fr">Nom du donneur d'ordre</description></column><column name="entity"><description locale="fr">Entité</description></column><column name="applicant_reference"><description locale="fr">Référence du donneur d'ordre</description></column><column width="5%" name="action"><url action="y"><parameter column="ref_id" name="REFERENCE_ID"/><parameter column="product_code" name="PRODUCT_CODE"/><parameter binding_code="HISTORY" name="OPTION_CODE"/><parameter binding_code="LIST_INQUIRY" name="OPERATION_CODE"/><parameter value="TRADEADMIN_SCREEN" name="SCREEN"/></url></column><column name="bg_liab_amt" hidden="y"/><column name="ref_id" hidden="y"/><column name="product_code" hidden="y"/><column name="ref_id" hidden="y"/><parameter input="y" name="ENTITE" size="" max_length=""><description locale="fr">ENTITE</description></parameter><parameter input="y" name="TIERS" size="" max_length=""><description locale="fr">TIERS</description></parameter><parameter name="export_list" file="stock CBC" type="export" file_name="stock CBC"/><candidate name="BG"><filter><criteria><column name="entity" type="String"/><operator type="like"/><value type="parameter">ENTITE</value></criteria><criteria><column name="applicant_reference" type="String"/><operator type="like"/><value type="parameter">TIERS</value></criteria></filter></candidate><aggregate type="count"><column name="ref_id"/><description locale="fr">Nombre de dossiers</description></aggregate><aggregate type="sum" cur="EUR"><column name="bg_liab_amt"/><description locale="fr">Total encours</description></aggregate><executable_flag>Y</executable_flag></listdef>}'
FROM DUAL)
SELECT
    SUBSTR(YOUR_COL, 1, STARTPOS) || SUBSTR(YOUR_COL, ENDPOS) AS OUTPUT
FROM (
        SELECT
            YOUR_COL,
            INSTR(YOUR_COL, '<column width="5%" name="action">') - 1 AS STARTPOS,
            INSTR(YOUR_COL, 'name="SCREEN"/></url></column>') + 30 AS ENDPOS
        FROM  YOUR_TABLE
    );
将您的_表(您的_列)作为
(选择
关于1332项测试NBG,欧洲系统评估委员会(Eurysysteème IdDate d’missionDate de ValiditéMontant de la Garantie BancaireNom du donneur d’Ordentitier d’Redentiteérence du donneur d’Ordentitiers Entiterierétiers


干杯!!

您可以通过组合使用
INSTR
SUBSTR
功能来实现它,如下所示:

WITH YOUR_TABLE(YOUR_COL) AS
(SELECT
    q'{<listdef page="25" default_order="entity" default_order_type="a"><reportId>1332</reportId><name>test</name><description>test</description><multiProduct>N</multiProduct><product_code>BG,</product_code><equivalentCurrency>EUR</equivalentCurrency><use_absolute_width>Y</use_absolute_width><column name="ref_id"><description locale="fr">Système Id</description></column><column name="iss_date"><description locale="fr">Date d'émission</description></column><column name="exp_date"><description locale="fr">Date de Validité</description></column><column name="bg_amt"><description locale="fr">Montant de la Garantie Bancaire</description></column><column name="applicant_name"><description locale="fr">Nom du donneur d'ordre</description></column><column name="entity"><description locale="fr">Entité</description></column><column name="applicant_reference"><description locale="fr">Référence du donneur d'ordre</description></column><column width="5%" name="action"><url action="y"><parameter column="ref_id" name="REFERENCE_ID"/><parameter column="product_code" name="PRODUCT_CODE"/><parameter binding_code="HISTORY" name="OPTION_CODE"/><parameter binding_code="LIST_INQUIRY" name="OPERATION_CODE"/><parameter value="TRADEADMIN_SCREEN" name="SCREEN"/></url></column><column name="bg_liab_amt" hidden="y"/><column name="ref_id" hidden="y"/><column name="product_code" hidden="y"/><column name="ref_id" hidden="y"/><parameter input="y" name="ENTITE" size="" max_length=""><description locale="fr">ENTITE</description></parameter><parameter input="y" name="TIERS" size="" max_length=""><description locale="fr">TIERS</description></parameter><parameter name="export_list" file="stock CBC" type="export" file_name="stock CBC"/><candidate name="BG"><filter><criteria><column name="entity" type="String"/><operator type="like"/><value type="parameter">ENTITE</value></criteria><criteria><column name="applicant_reference" type="String"/><operator type="like"/><value type="parameter">TIERS</value></criteria></filter></candidate><aggregate type="count"><column name="ref_id"/><description locale="fr">Nombre de dossiers</description></aggregate><aggregate type="sum" cur="EUR"><column name="bg_liab_amt"/><description locale="fr">Total encours</description></aggregate><executable_flag>Y</executable_flag></listdef>}'
FROM DUAL)
SELECT
    SUBSTR(YOUR_COL, 1, STARTPOS) || SUBSTR(YOUR_COL, ENDPOS) AS OUTPUT
FROM (
        SELECT
            YOUR_COL,
            INSTR(YOUR_COL, '<column width="5%" name="action">') - 1 AS STARTPOS,
            INSTR(YOUR_COL, 'name="SCREEN"/></url></column>') + 30 AS ENDPOS
        FROM  YOUR_TABLE
    );
将您的_表(您的_列)作为
(选择
关于1332项测试NBG,欧洲系统评估委员会(Eurysysteème IdDate d’missionDate de ValiditéMontant de la Garantie BancaireNom du donneur d’Ordentitier d’Redentiteérence du donneur d’Ordentitiers Entiterierétiers


干杯!!

如果您的值在语法上是有效的XML/XHTML,那么您可以将其转换为
XMLTYPE
,并使用
DELETEXML
删除
标记,其
名称
属性等于
“action”

Oracle安装程序

将表测试数据(值)创建为

选择q'{1332测试NBG,EURYSystème IdDate d'missionDate de ValiditéMontant de la Garantie BancaireNom du donneur d'ordreentiteéRérence du donneur d'ordreentiaterérence du donneur d'ordreentiateréentier entiers

如果您的值是语法有效的XML/XHTML,那么您可以将其转换为
XMLTYPE
并使用
删除XML
列g的
名称
属性等于
“action”

Oracle安装程序

将表测试数据(值)创建为

选择q'{1332testtestNBG,EURYSystème IdDate d'missionDate de ValiditéMontant de la Garantie BancaireNom du donneur d'ordreentiteéRérence du donneur d'ordreentiiterérence du donneur d'ordreentiertiersentitiers

这不会删除字符串的所需部分,而将其余部分保留为OP所需。此外,正则表达式可能匹配过多。此查询的结果是我想删除的内容并不是为了保留excuse me@Blue,我以一种互补的方式理解了逻辑。现在已修复。如果
name
属性在
width
属性之前(这对HTML/XML的含义没有影响),它仍然会删除太多内容,并且也会失败。这不会删除字符串中所需的部分,而将其余部分保留为OP请求的部分。此外,正则表达式可能匹配太多。此查询的结果是我要删除的内容,而不是保留pexcuse me@Blue。我以补充方式理解了逻辑。现在已修复。它仍然可以删除太多内容,如果
name
属性位于
width
属性之前(这对HTML/XML的含义没有影响)。如果子字符串在其他(有效)中匹配,这将不起作用放置在输入中,如果属性的顺序发生更改,它也将失败。是的,根据样本数据进行解决。如果子字符串在输入中的其他(有效)位置匹配,则此操作将无效,如果属性的顺序发生更改,它也将失败。是的,根据样本数据进行解决。