如何使用postgres sql正则表达式删除重复项和inc表记录

问题描述 投票:0回答:1

我在小提琴中创建了场景https://dbfiddle.uk/VlKz_7fg 我必须删除重复记录并仅保留 1 条记录示例:对于发现的表 mfg_lz.icc_axbi_kanban_job 有 2 条记录,因此需要删除重复记录并仅保留 1 条记录。

此外,我不需要发现表具有像 mfg_lz_inc.icc_axbi_kanban_job 这样的 inc 表的记录。

所以理想情况下,我期望输出中只有 1 行,其中包含发现的表 mfg_lz.icc_axbi_kanban_job。 然而目前我得到了 4 行。有人可以帮助我应该在正则表达式中写什么来实现输出吗?

regex postgresql postgresql-9.5
1个回答
0
投票
  1. 如果您想同时使用 btrim()
    rtrim()
    ,可以使用
    ltrim()
  2. 如果您需要多个
    replace()
    ,您可以使用单个
    translate()
  3. 您使用单个参数调用
    concat()
    ,该参数是通过与
    ||
    连接构造的。您只需要其中之一:用逗号将单独的参数传递给
    concat()
    ,或者完全删除
    concat()
    并仅与
    ||
    连接。
  4. [:word:]
    [:alpha:]
    字符类在 PostgreSQL 14 中可用。假设您使用的是 9.5(您使用的最高版本标签),您可以将它们替换为
    \w
    ,稍微降级您的正则表达式(它现在允许标识符以数字开头,这是不允许的)。
  5. 您当前仅捕获限定名称中的架构。您可以扩展表达式以允许不带引号的标识符中的点,或者只是两个带引号的标识符中间的可选点。

db<>fiddle 的演示:

with cte as (
    select field1,field2
          ,translate(
                concat( '''' 
                   ,translate(
                        btrim(field2)
                       ,'"'''
                       ,'' )
                   ,'''' )
               ,E'\n"'
               ,'' ) as edited_field2 
  from table1)
,cte2 as (
    select *,unnest(
                regexp_matches(
                    edited_field2
                   ,'(?:FROM)(?:\s+ONLY)*\s+([\w\.]+|"[^"]+"(?:\."[^"]+")?)','gi' )
             ) AS spotted_table
    from cte)
select field1,spotted_table,edited_field2
from cte2
where split_part(spotted_table,'.',1) !~* '_inc$';
字段1 spotted_table 编辑_字段2
a mfg_lz.icc_axbi_kanban_job '选择 service_management.analyze_table(kanban_job,mfg_lz_inc);从 mfg_lz.icc_axbi_kanban_job 中删除 dw_upd_dtsz < To_Date(Cast(extract (year from (Current_Timestamp))-7 AS CHAR(4))||/02/01,yyyy/mm/dd);DELETE FROM mfg_lz.icc_axbi_kanban_job AWHERE EXISTS (SELECT 1 FROM mfg_lz_inc.icc_axbi_kanban_job B WHERE A.recid = B.recid and A.KANBAN=B.KANBAN);INSERT into mfg_lz.icc_axbi_kanban_job(ACTUALENDDATETIME,ACTUALENDDATETIMETZID,ACTUALPREPAREDDATETIME,ACTUALPREPAREDDATETIMETZID,ACTUALSTARTDATETIME,ACTUALSTARTDATETIMETZID,DEFAULTDIMENSION,DUEDATETIME,DUEDATETIMETZID,EXECUTABLE,EXPECTEDDATETIME,EXPECTEDDATETIMETZID,INVENTDIMDATAAREAID,INVENTDIMID,INVENTLOCATIONDATAAREAID,INVENTLOCATIONID,INVENTTRANSDATAAREAID,INVENTTRANSID,ISSUEINVENTDIMDATAAREAID,ISSUEINVENTDIMID,ISSUEINVENTTRANSDATAAREAID,ISSUEINVENTTRANSID,KANBAN,LEANPRODUCTIONFLOWACTIVITY,LEANSCHEDULEGROUPCOLOR,LEANSCHEDULEGROUPNAME,LEANSCHEDULEITEMRATIO,PLANACTIVITYNAME,QUANTITYORDERED,QUANTITYRECEIVED,QUANTITYSCRAPPED,SEQUENCE,SOURCEDOCUMENTHEADER,STATUS,TYPEE,WMSLOCATIONDATAAREAID,WMSLOCATIONID,WORKCELL,LOADPERCENT,PARTITIONN,RECID,RECVERSION,AXLWIPENDDATETIME,AXLWIPENDDATETIMETZID,AXLESTIMATEDSTARTDATETIME,AXLESTIMATEDSTARTDATETIMETZID,AXLRESOURCECONSTRAINEDJOBTIMEMINUTES,AXLKANBANACTIVITYPLANNEDSTARTDATE,AXLKANBANACTIVITYPLANNEDSTARTDATETIME,AXLKANBANACTIVITYPLANNEDSTARTDATETIMETZID,AXLKANBANACTIVITYPLANNEDENDDATETIME,AXLKANBANACTIVITYPLANNEDENDDATETIMETZID,AXLKANBANACTIVITYSCHEDULINGENDDATETIME,AXLKANBANACTIVITYSCHEDULINGENDDATETIMETZID,AXLFIS,MANUALCLEAR,MODIFIEDBY,TERMINAL,MODIFIEDDATETIME,MODIFIEDBY,CREATEDDATETIME,CREATEDBY,KFK_INS_DTSZ,SRC_SYS_NM,DW_ROW_HASH_VAL,DW_SRC_SITE_ID,DW_INS_DTSZ,DW_UPD_DTSZ,DW_LD_GRP_VAL,DW_ETL_SESS_NM) select INC_L.ACTUALENDDATETIME,INC_L.ACTUALENDDATETIMETZID,INC_L.ACTUALPREPAREDDATETIME,INC_L.ACTUALPREPAREDDATETIMETZID,INC_L.ACTUALSTARTDATETIME,INC_L.ACTUALSTARTDATETIMETZID,INC_L.DEFAULTDIMENSION,INC_L.DUEDATETIME,INC_L.DUEDATETIMETZID,INC_L.EXECUTABLE,INC_L.EXPECTEDDATETIME,INC_L.EXPECTEDDATETIMETZID,INC_L.INVENTDIMDATAAREAID,INC_L.INVENTDIMID,INC_L.INVENTLOCATIONDATAAREAID,INC_L.INVENTLOCATIONID,INC_L.INVENTTRANSDATAAREAID,INC_L.INVENTTRANSID,INC_L.ISSUEINVENTDIMDATAAREAID,INC_L.ISSUEINVENTDIMID,INC_L.ISSUEINVENTTRANSDATAAREAID,INC_L.ISSUEINVENTTRANSID,INC_L.KANBAN,INC_L.LEANPRODUCTIONFLOWACTIVITY,INC_L.LEANSCHEDULEGROUPCOLOR,INC_L.LEANSCHEDULEGROUPNAME,INC_L.LEANSCHEDULEITEMRATIO,INC_L.PLANACTIVITYNAME,INC_L.QUANTITYORDERED,INC_L.QUANTITYRECEIVED,INC_L.QUANTITYSCRAPPED,INC_L.SEQUENCE,INC_L.SOURCEDOCUMENTHEADER,INC_L.STATUS,INC_L.TYPEE,INC_L.WMSLOCATIONDATAAREAID,INC_L.WMSLOCATIONID,INC_L.WORKCELL,INC_L.LOADPERCENT,INC_L.PARTITIONN,INC_L.RECID,INC_L.RECVERSION,INC_L.AXLWIPENDDATETIME,INC_L.AXLWIPENDDATETIMETZID,INC_L.AXLESTIMATEDSTARTDATETIME,INC_L.AXLESTIMATEDSTARTDATETIMETZID,INC_L.AXLRESOURCECONSTRAINEDJOBTIMEMINUTES,INC_L.AXLKANBANACTIVITYPLANNEDSTARTDATE,INC_L.AXLKANBANACTIVITYPLANNEDSTARTDATETIME,INC_L.AXLKANBANACTIVITYPLANNEDSTARTDATETIMETZID,INC_L.AXLKANBANACTIVITYPLANNEDENDDATETIME,INC_L.AXLKANBANACTIVITYPLANNEDENDDATETIMETZID,INC_L.AXLKANBANACTIVITYSCHEDULINGENDDATETIME,INC_L.AXLKANBANACTIVITYSCHEDULINGENDDATETIMETZID,INC_L.AXLFIS,INC_L.MANUALCLEAR,INC_L.MODIFIEDBY,INC_L.TERMINAL,INC_L.MODIFIEDDATETIME,INC_L.MODIFIEDBY,INC_L.CREATEDDATETIME,INC_L.CREATEDBY,INC_L.KFK_INS_DTSZ,COALESCE(INC_L.src_sys_nm, ) AS src_sys_nm,md5(coalesce(cast(INC_L.recid as varchar(100))||cast(INC_L.KANBAN as varchar(100))||cast(INC_L.src_sys_nm as varchar(100)),1)) as dw_row_hash_val,1040 as dw_src_site_id,current_timestamp as dw_ins_dtsz,current_timestamp as dw_upd_dtsz,cast((to_char(current_timestamp, YYYYMMDDHH24MI)||.00) as numeric) as dw_ld_grp_val,ICM_INVSSF_DDLDSC_KFK_GPSS_ICC_AXBI_KANBAN_JOB as dw_etl_sess_nm from (select ACTUALENDDATETIME,ACTUALENDDATETIMETZID,ACTUALPREPAREDDATETIME,ACTUALPREPAREDDATETIMETZID,ACTUALSTARTDATETIME,ACTUALSTARTDATETIMETZID,DEFAULTDIMENSION,DUEDATETIME,DUEDATETIMETZID,EXECUTABLE,EXPECTEDDATETIME,EXPECTEDDATETIMETZID,INVENTDIMDATAAREAID,INVENTDIMID,INVENTLOCATIONDATAAREAID,INVENTLOCATIONID,INVENTTRANSDATAAREAID,INVENTTRANSID,ISSUEINVENTDIMDATAAREAID,ISSUEINVENTDIMID,ISSUEINVENTTRANSDATAAREAID,ISSUEINVENTTRANSID,KANBAN,LEANPRODUCTIONFLOWACTIVITY,LEANSCHEDULEGROUPCOLOR,LEANSCHEDULEGROUPNAME,LEANSCHEDULEITEMRATIO,PLANACTIVITYNAME,QUANTITYORDERED,QUANTITYRECEIVED,QUANTITYSCRAPPED,SEQUENCE,SOURCEDOCUMENTHEADER,STATUS,TYPEE,WMSLOCATIONDATAAREAID,WMSLOCATIONID,WORKCELL,LOADPERCENT,PARTITIONN,RECID,RECVERSION,AXLWIPENDDATETIME,AXLWIPENDDATETIMETZID,AXLESTIMATEDSTARTDATETIME,AXLESTIMATEDSTARTDATETIMETZID,AXLRESOURCECONSTRAINEDJOBTIMEMINUTES,AXLKANBANACTIVITYPLANNEDSTARTDATE,AXLKANBANACTIVITYPLANNEDSTARTDATETIME,AXLKANBANACTIVITYPLANNEDSTARTDATETIMETZID,AXLKANBANACTIVITYPLANNEDENDDATETIME,AXLKANBANACTIVITYPLANNEDENDDATETIMETZID,AXLKANBANACTIVITYSCHEDULINGENDDATETIME,AXLKANBANACTIVITYSCHEDULINGENDDATETIMETZID,AXLFIS,MANUALCLEAR,MODIFIEDBY,TERMINAL,MODIFIEDDATETIME,MODIFIEDBY,CREATEDDATETIME,CREATEDBY,KFK_INS_DTSZ,SRC_SYS_NM,row_number ()over (partition by recid,kanban,src_sys_nm order by kfk_ins_dtsz desc) as first_value from mfg_lz_inc.icc_axbi_kanban_job) INC_Lwhere first_value=1;select service_management.analyze_table(icc_axbi_kanban_job,mfg_lz);'
a mfg_lz.icc_axbi_kanban_job '选择 service_management.analyze_table(kanban_job,mfg_lz_inc);从 mfg_lz.icc_axbi_kanban_job 中删除 dw_upd_dtsz < To_Date(Cast(extract (year from (Current_Timestamp))-7 AS CHAR(4))||/02/01,yyyy/mm/dd);DELETE FROM mfg_lz.icc_axbi_kanban_job AWHERE EXISTS (SELECT 1 FROM mfg_lz_inc.icc_axbi_kanban_job B WHERE A.recid = B.recid and A.KANBAN=B.KANBAN);INSERT into mfg_lz.icc_axbi_kanban_job(ACTUALENDDATETIME,ACTUALENDDATETIMETZID,ACTUALPREPAREDDATETIME,ACTUALPREPAREDDATETIMETZID,ACTUALSTARTDATETIME,ACTUALSTARTDATETIMETZID,DEFAULTDIMENSION,DUEDATETIME,DUEDATETIMETZID,EXECUTABLE,EXPECTEDDATETIME,EXPECTEDDATETIMETZID,INVENTDIMDATAAREAID,INVENTDIMID,INVENTLOCATIONDATAAREAID,INVENTLOCATIONID,INVENTTRANSDATAAREAID,INVENTTRANSID,ISSUEINVENTDIMDATAAREAID,ISSUEINVENTDIMID,ISSUEINVENTTRANSDATAAREAID,ISSUEINVENTTRANSID,KANBAN,LEANPRODUCTIONFLOWACTIVITY,LEANSCHEDULEGROUPCOLOR,LEANSCHEDULEGROUPNAME,LEANSCHEDULEITEMRATIO,PLANACTIVITYNAME,QUANTITYORDERED,QUANTITYRECEIVED,QUANTITYSCRAPPED,SEQUENCE,SOURCEDOCUMENTHEADER,STATUS,TYPEE,WMSLOCATIONDATAAREAID,WMSLOCATIONID,WORKCELL,LOADPERCENT,PARTITIONN,RECID,RECVERSION,AXLWIPENDDATETIME,AXLWIPENDDATETIMETZID,AXLESTIMATEDSTARTDATETIME,AXLESTIMATEDSTARTDATETIMETZID,AXLRESOURCECONSTRAINEDJOBTIMEMINUTES,AXLKANBANACTIVITYPLANNEDSTARTDATE,AXLKANBANACTIVITYPLANNEDSTARTDATETIME,AXLKANBANACTIVITYPLANNEDSTARTDATETIMETZID,AXLKANBANACTIVITYPLANNEDENDDATETIME,AXLKANBANACTIVITYPLANNEDENDDATETIMETZID,AXLKANBANACTIVITYSCHEDULINGENDDATETIME,AXLKANBANACTIVITYSCHEDULINGENDDATETIMETZID,AXLFIS,MANUALCLEAR,MODIFIEDBY,TERMINAL,MODIFIEDDATETIME,MODIFIEDBY,CREATEDDATETIME,CREATEDBY,KFK_INS_DTSZ,SRC_SYS_NM,DW_ROW_HASH_VAL,DW_SRC_SITE_ID,DW_INS_DTSZ,DW_UPD_DTSZ,DW_LD_GRP_VAL,DW_ETL_SESS_NM) select INC_L.ACTUALENDDATETIME,INC_L.ACTUALENDDATETIMETZID,INC_L.ACTUALPREPAREDDATETIME,INC_L.ACTUALPREPAREDDATETIMETZID,INC_L.ACTUALSTARTDATETIME,INC_L.ACTUALSTARTDATETIMETZID,INC_L.DEFAULTDIMENSION,INC_L.DUEDATETIME,INC_L.DUEDATETIMETZID,INC_L.EXECUTABLE,INC_L.EXPECTEDDATETIME,INC_L.EXPECTEDDATETIMETZID,INC_L.INVENTDIMDATAAREAID,INC_L.INVENTDIMID,INC_L.INVENTLOCATIONDATAAREAID,INC_L.INVENTLOCATIONID,INC_L.INVENTTRANSDATAAREAID,INC_L.INVENTTRANSID,INC_L.ISSUEINVENTDIMDATAAREAID,INC_L.ISSUEINVENTDIMID,INC_L.ISSUEINVENTTRANSDATAAREAID,INC_L.ISSUEINVENTTRANSID,INC_L.KANBAN,INC_L.LEANPRODUCTIONFLOWACTIVITY,INC_L.LEANSCHEDULEGROUPCOLOR,INC_L.LEANSCHEDULEGROUPNAME,INC_L.LEANSCHEDULEITEMRATIO,INC_L.PLANACTIVITYNAME,INC_L.QUANTITYORDERED,INC_L.QUANTITYRECEIVED,INC_L.QUANTITYSCRAPPED,INC_L.SEQUENCE,INC_L.SOURCEDOCUMENTHEADER,INC_L.STATUS,INC_L.TYPEE,INC_L.WMSLOCATIONDATAAREAID,INC_L.WMSLOCATIONID,INC_L.WORKCELL,INC_L.LOADPERCENT,INC_L.PARTITIONN,INC_L.RECID,INC_L.RECVERSION,INC_L.AXLWIPENDDATETIME,INC_L.AXLWIPENDDATETIMETZID,INC_L.AXLESTIMATEDSTARTDATETIME,INC_L.AXLESTIMATEDSTARTDATETIMETZID,INC_L.AXLRESOURCECONSTRAINEDJOBTIMEMINUTES,INC_L.AXLKANBANACTIVITYPLANNEDSTARTDATE,INC_L.AXLKANBANACTIVITYPLANNEDSTARTDATETIME,INC_L.AXLKANBANACTIVITYPLANNEDSTARTDATETIMETZID,INC_L.AXLKANBANACTIVITYPLANNEDENDDATETIME,INC_L.AXLKANBANACTIVITYPLANNEDENDDATETIMETZID,INC_L.AXLKANBANACTIVITYSCHEDULINGENDDATETIME,INC_L.AXLKANBANACTIVITYSCHEDULINGENDDATETIMETZID,INC_L.AXLFIS,INC_L.MANUALCLEAR,INC_L.MODIFIEDBY,INC_L.TERMINAL,INC_L.MODIFIEDDATETIME,INC_L.MODIFIEDBY,INC_L.CREATEDDATETIME,INC_L.CREATEDBY,INC_L.KFK_INS_DTSZ,COALESCE(INC_L.src_sys_nm, ) AS src_sys_nm,md5(coalesce(cast(INC_L.recid as varchar(100))||cast(INC_L.KANBAN as varchar(100))||cast(INC_L.src_sys_nm as varchar(100)),1)) as dw_row_hash_val,1040 as dw_src_site_id,current_timestamp as dw_ins_dtsz,current_timestamp as dw_upd_dtsz,cast((to_char(current_timestamp, YYYYMMDDHH24MI)||.00) as numeric) as dw_ld_grp_val,ICM_INVSSF_DDLDSC_KFK_GPSS_ICC_AXBI_KANBAN_JOB as dw_etl_sess_nm from (select ACTUALENDDATETIME,ACTUALENDDATETIMETZID,ACTUALPREPAREDDATETIME,ACTUALPREPAREDDATETIMETZID,ACTUALSTARTDATETIME,ACTUALSTARTDATETIMETZID,DEFAULTDIMENSION,DUEDATETIME,DUEDATETIMETZID,EXECUTABLE,EXPECTEDDATETIME,EXPECTEDDATETIMETZID,INVENTDIMDATAAREAID,INVENTDIMID,INVENTLOCATIONDATAAREAID,INVENTLOCATIONID,INVENTTRANSDATAAREAID,INVENTTRANSID,ISSUEINVENTDIMDATAAREAID,ISSUEINVENTDIMID,ISSUEINVENTTRANSDATAAREAID,ISSUEINVENTTRANSID,KANBAN,LEANPRODUCTIONFLOWACTIVITY,LEANSCHEDULEGROUPCOLOR,LEANSCHEDULEGROUPNAME,LEANSCHEDULEITEMRATIO,PLANACTIVITYNAME,QUANTITYORDERED,QUANTITYRECEIVED,QUANTITYSCRAPPED,SEQUENCE,SOURCEDOCUMENTHEADER,STATUS,TYPEE,WMSLOCATIONDATAAREAID,WMSLOCATIONID,WORKCELL,LOADPERCENT,PARTITIONN,RECID,RECVERSION,AXLWIPENDDATETIME,AXLWIPENDDATETIMETZID,AXLESTIMATEDSTARTDATETIME,AXLESTIMATEDSTARTDATETIMETZID,AXLRESOURCECONSTRAINEDJOBTIMEMINUTES,AXLKANBANACTIVITYPLANNEDSTARTDATE,AXLKANBANACTIVITYPLANNEDSTARTDATETIME,AXLKANBANACTIVITYPLANNEDSTARTDATETIMETZID,AXLKANBANACTIVITYPLANNEDENDDATETIME,AXLKANBANACTIVITYPLANNEDENDDATETIMETZID,AXLKANBANACTIVITYSCHEDULINGENDDATETIME,AXLKANBANACTIVITYSCHEDULINGENDDATETIMETZID,AXLFIS,MANUALCLEAR,MODIFIEDBY,TERMINAL,MODIFIEDDATETIME,MODIFIEDBY,CREATEDDATETIME,CREATEDBY,KFK_INS_DTSZ,SRC_SYS_NM,row_number ()over (partition by recid,kanban,src_sys_nm order by kfk_ins_dtsz desc) as first_value from mfg_lz_inc.icc_axbi_kanban_job) INC_Lwhere first_value=1;select service_management.analyze_table(icc_axbi_kanban_job,mfg_lz);'
  1. 考虑使用预先构建的 SQL 解析器工具之前推荐的而不是正则表达式。
© www.soinside.com 2019 - 2024. All rights reserved.