DB2中的REGEXP或TRANSLATE是否会替代REPLACE?

问题描述

缩短以下sql代码的最佳方法是什么?

REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(TRIM(MYFIELD),'-R1',''),'-R2','-R3','-R4','-R5','-R6','-R7','-R8','-R9','-RA','-RB','-RC','-RD','-RE','-RF','') AS TESTFIELD

这是我尝试过的:

    REGEXP_REPLACE(MYFIELD,'-R[0-100][a-fA-F]','')

原始数据

  1. N-RX ABCD
  2. 组选项-01
  3. 优势65 SELECT B-R11
  4. 优势65 SELECT B-RA
  5. 优势65 SELECT B-R09
  6. 优势65 SELECT B-RB
  7. 优势65 SELECT B / 2A

所需结果:

  1. N-RX ABCD
  2. 组选项-01
  3. 优势65 SELECT B

解决方案:

REGEXP_REPLACE(Trim(MyField),'[-|/]R[0-9a-zA-Z*][0-9a-zA-Z*]*$','')

解决方法

您的正则表达式是您当前的问题。尝试类似的东西:

REGEXP_REPLACE(DACL_PDLV_5_DE,'-R[0-9a-fA-F][0-9]*$','')

这与'-R'匹配,后跟一个数字或a-f或A-F,还可以选择后面跟一个数字,但仅在字符串的末尾。

如果您可以使用两位数的十六进制值,则需要进行相应的调整。