DB2 中的 REGEXP 或 TRANSLATE 会是 REPLACE 的另一种选择吗?

would REGEXP or TRANSLATE in DB2 another choice for 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,可选地后跟另一个数字,但仅在字符串的末尾。

如果您有一个 two-digit 十六进制值,您将需要相应地进行调整。