SQL - 向字符串添加空格

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

我正在寻找一种解决方案,在DESCR属性字段下的整个字符串中出现特定的CODE符号后插入空格。

可用数据样本:

enter image description here

总体逻辑是SQL在使用CASE找到它时指定特定的CODE,否则它会分配静态的默认CODE。

CODEs如下:VBN,BNM,XCV。随机,因为我想表明每一个都有不同的长度和字母模式。

SELECT FUND_FAMILY,BUSINESS_UNIT_AP,VOUCHER_ID,INVOICE_ID, VENDOR_ID, DESCR
 FROM
 (
     SELECT ROW_NUMBER() OVER (PARTITION BY ID ORDER BY ID) as RowNumb, FUND_FAMILY,BUSINESS_UNIT_AP,VOUCHER_ID,INVOICE_ID, VENDOR_ID, DESCR
     FROM (

SELECT FUND_FAMILY||BUSINESS_UNIT_AP||VOUCHER_ID||INVOICE_ID||VENDOR_ID ID,FUND_FAMILY,BUSINESS_UNIT_AP,VOUCHER_ID,INVOICE_ID, VENDOR_ID, 

DESCR FROM (
SELECT
VOUCHER_LINE_NUM,
     CASE instr (DESCR, 'XCV') 
     WHEN  (0) 

     THEN (CASE instr (DESCR, 'VBN') 
     WHEN  (0) 
     THEN  (CASE instr (DESCR, 'BNM') 
     WHEN  (0) 
     THEN  (CASE instr (DESCR, 'ASD') 
     WHEN  (0)
     THEN  (CASE instr (DESCR, 'ERT') 
     WHEN  (0) 
     THEN  (CASE instr (DESCR, 'ERY') 
     WHEN  (0)
     THEN  (CASE instr (DESCR, 'RTTYUU') 
     WHEN  (0)
     THEN  (CASE instr (DESCR, 'HJKKK') 
     WHEN  (0)

     THEN  'CODE2'  

     ELSE  SUBSTR(DESCR, instr (DESCR, 'CODE8'), 5) END)
     ELSE  SUBSTR(DESCR, instr (DESCR, 'CODE7'), 5) END)
     ELSE  SUBSTR(DESCR, instr (DESCR, 'CODE6'), 4) END)
     ELSE  SUBSTR(DESCR, instr (DESCR, 'CODE5'), 5) END)
     ELSE  SUBSTR(DESCR, instr (DESCR, 'CODE4'), 5) END)   
     ELSE  SUBSTR(DESCR, instr (DESCR, 'CODE3'), 4) END)  
     ELSE  SUBSTR(DESCR, instr (DESCR, 'CODE2'), 6) END)  

     ELSE  SUBSTR(DESCR, instr (DESCR, 'CODE1'), 4) 

     END AS FUND_FAMILY,

BUSINESS_UNIT_AP,VOUCHER_ID,INVOICE_ID,VENDOR_ID, DESCR FROM TABLE_NAME 

WHERE UNIT IN ('ETITY1')
AND ACCOUNT = '135000' 
AND FISCAL_YEAR > 2013

AND (DESCR LIKE '%CODE1%' OR DESCR LIKE '%CODE2%' OR DESCR LIKE '%CODE3%' OR DESCR LIKE '%CODE4%' OR DESCR LIKE '%CODE5%'
OR DESCR LIKE '%CODE6%' OR  DESCR LIKE '%CODE7%' OR DESCR LIKE '%CODE8%' OR DESCR LIKE '%CODE9%')

AND NOT DESCR LIKE '%CODE10%'

GROUP BY 
VOUCHER_LINE_NUM , 
     CASE instr (DESCR, 'CODE1') 
     WHEN  (0) 

     THEN (CASE instr (DESCR, 'CODE2') 
     WHEN  (0) 
     THEN  (CASE instr (DESCR, 'CODE3') 
     WHEN  (0) 
     THEN  (CASE instr (DESCR, 'CODE4') 
     WHEN  (0)
     THEN  (CASE instr (DESCR, 'CODE5') 
     WHEN  (0) 
     THEN  (CASE instr (DESCR, 'CODE6') 
     WHEN  (0)
     THEN  (CASE instr (DESCR, 'CODE7') 
     WHEN  (0)
     THEN  (CASE instr (DESCR, 'CODE8') 
     WHEN  (0)

     THEN  'CODE2'  

     ELSE  SUBSTR(DESCR, instr (DESCR, 'CODE8'), 5) END)
     ELSE  SUBSTR(DESCR, instr (DESCR, 'CODE7'), 5) END)
     ELSE  SUBSTR(DESCR, instr (DESCR, 'CODE6'), 4) END)
     ELSE  SUBSTR(DESCR, instr (DESCR, 'CODE5'), 5) END)
     ELSE  SUBSTR(DESCR, instr (DESCR, 'CODE4'), 5) END)   
     ELSE  SUBSTR(DESCR, instr (DESCR, 'CODE3'), 4) END)  
     ELSE  SUBSTR(DESCR, instr (DESCR, 'CODE2'), 6) END)

     ELSE  SUBSTR(DESCR, instr (DESCR, 'CODE1'), 4) 
     END, BUSINESS_UNIT_AP,VOUCHER_ID,INVOICE_ID,VENDOR_ID, DESCR


    )
        )
            ) X 
WHERE RowNumb = 1
sql database oracle whitespace analysis
1个回答
1
投票

听起来像regexp_replace的工作。

trim(regexp_replace(descr,'( )*(FGIF|FTIF|FTOF|FTSF|FTSIF|FTSIIF|FTSMF|TISCE)( )*',' \2 '))

正则表达式寻找[zero or more spaces][any one of your codes][zero or more spaces]并用[ ][the code it found][ ]替换它。如果代码出现在字符串的开头或结尾,则需要trim()。 (我希望有一种方法可以在正则表达式本身中处理这个问题,但只需要对整个表达式进行操作就可以轻松了。)

© www.soinside.com 2019 - 2024. All rights reserved.