繁体   English   中英

从 python 中的字符串 sql 查询中删除注释和转义字符

[英]Remove comments and escape characters from string sql query in python

大家好,我有一个 sql 查询,如下所示,带有一些注释和转义字符

注释以--开头并使用转义字符\n

注释可以以--开头,也可以以--结尾,但 end --不是强制性的

--Data Source for Tableau DQ Dashboard (Failure Summary) for IM \nWith DEP_DETAIL as\n(\n\nselect distinct D.SYS_NAME as SOR, A.YEAR_MONTH,A.SRC_INSTR_ID,C.data_element ,A.DATE_OF_BIRTH,A.STATUS_DESC,A.OD_REGE_OPT_CD,A.OD_REGE_OPT_CD,C.RULE_DESCRIPTION,A.PRINCIPAL_ENDING_BAL, SERVICING_COST_CENTER,A.PROD_LEVEL1_CD_DESC as level1_cd_desc\n,A.SRC_INSTR_OPEN_DT, EXTRACT(YEAR FROM SRC_INSTR_OPEN_DT) as YEAR_INSTR_OPEN, D.SYS_NAME, E.DQ_CATG_NAME, A.LOB, B.PASS_IND\nfrom UMA_RBG_DQ.F_DQ_IM_ACCT A\nInner Join UMA_RBG_DQ.F_KDE_RESULT_DETAIL B\nON A.SRC_INSTR_ID = B.SRC_INSTR_ID\nAND A.YEAR_MONTH = B.YEAR_MONTH\n\nINNER JOIN UMA_RBG_DQ.D_RULE C\nON B.RULE_ID = C.RULE_ID\nAND C.ACTIVE_FLAG = 'Y'\n\nInner Join UMA_RBG_DQ.D_SYSTEM D\nON C.SYSTEM_ID = D.SYSTEM_ID\nAND D.ACTIVE_FLAG = 'Y'\n\nInner Join D_DQ_CATG E\nON C.DQ_CATG_ID = E.DQ_CATG_ID\nWHERE A.YEAR_MONTH >= to_char(add_months(trunc(sysdate,'MM'),-12),'YYYYMM')    -- 'Failure Trend' Dashboard shows failed and passed records for past 1 year, hence -12 from sysdate\n--AND C.RULE_ID <> 'RBG_DQ_1014'\n)\n\nSELECT\n    year_month, Data_Element, rule_description as rule, DQ_CATG_NAME as dq_dimension, level1_cd_desc,\n    SUM(CASE WHEN PASS_IND = 'N' THEN 1 END) AS failed_cnt,\n    SUM(CASE WHEN PASS_IND = 'Y' THEN 1 END) AS passed_cnt,\n    SUM(CASE WHEN PASS_IND = 'N' THEN 1 END) * 1.0 / COUNT(*) AS failed_perc,\n    SUM(CASE WHEN PASS_IND = 'Y' THEN 1 END ) * 1.0 / COUNT(*) AS passed_perc\nFROM\n    DEP_DETAIL\nGROUP BY year_month, Data_Element, rule_description, DQ_CATG_NAME, level1_cd_desc

我想要只有 sql 查询的最终结果,不包括注释和转义字符,如下所示。

With DEP_DETAIL as (  select distinct D.SYS_NAME as SOR, A.YEAR_MONTH,A.SRC_INSTR_ID,C.data_element ,A.DATE_OF_BIRTH,A.STATUS_DESC,A.OD_REGE_OPT_CD,A.OD_REGE_OPT_CD,C.RULE_DESCRIPTION,A.PRINCIPAL_ENDING_BAL, SERVICING_COST_CENTER,A.PROD_LEVEL1_CD_DESC as level1_cd_desc ,A.SRC_INSTR_OPEN_DT, EXTRACT(YEAR FROM SRC_INSTR_OPEN_DT) as YEAR_INSTR_OPEN, D.SYS_NAME, E.DQ_CATG_NAME, A.LOB, B.PASS_IND from UMA_RBG_DQ.F_DQ_IM_ACCT A Inner Join UMA_RBG_DQ.F_KDE_RESULT_DETAIL B ON A.SRC_INSTR_ID = B.SRC_INSTR_ID AND A.YEAR_MONTH = B.YEAR_MONTH  INNER JOIN UMA_RBG_DQ.D_RULE C ON B.RULE_ID = C.RULE_ID AND C.ACTIVE_FLAG = 'Y'  Inner Join UMA_RBG_DQ.D_SYSTEM D ON C.SYSTEM_ID = D.SYSTEM_ID AND D.ACTIVE_FLAG = 'Y'  Inner Join D_DQ_CATG E ON C.DQ_CATG_ID = E.DQ_CATG_ID WHERE A.YEAR_MONTH >= to_char(add_months(trunc(sysdate,'MM'),-12),'YYYYMM') AND C.RULE_ID <> 'RBG_DQ_1014' )  SELECT     year_month, Data_Element, rule_description as rule, DQ_CATG_NAME as dq_dimension, level1_cd_desc,     SUM(CASE WHEN PASS_IND = 'N' THEN 1 END) AS failed_cnt,     SUM(CASE WHEN PASS_IND = 'Y' THEN 1 END) AS passed_cnt,     SUM(CASE WHEN PASS_IND = 'N' THEN 1 END) * 1.0 / COUNT(*) AS failed_perc,     SUM(CASE WHEN PASS_IND = 'Y' THEN 1 END ) * 1.0 / COUNT(*) AS passed_perc FROM     DEP_DETAIL GROUP BY year_month, Data_Element, rule_description, DQ_CATG_NAME, level1_cd_desc

如何解析此 sql 查询以获得所需的结果?

如果我理解正确,您希望将查询拆分为行,并且仅将文本保留在任何--事件的左侧:

' '.join(part for line in query.split('\n') for part in line.split('--')[::2])

更新

固定为在拆分后仅保留奇数位置-- (因为可以嵌套注释)

x = x.replace('\n', '').replace('--', '')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM