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]','')
原始数据
- N-RX ABCD
- 组选项 -01
- 优势 65 SELECT B-R11
- 优势 65 SELECT B-RA
- 优势 65 SELECT B-R09
- 优势 65 SELECT B-RB
- 优势 65 SELECT B/2A
需要的结果:
- N-RX ABCD
- 组选项 -01
- 优势 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 十六进制值,您将需要相应地进行调整。
缩短 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]','')
原始数据
- N-RX ABCD
- 组选项 -01
- 优势 65 SELECT B-R11
- 优势 65 SELECT B-RA
- 优势 65 SELECT B-R09
- 优势 65 SELECT B-RB
- 优势 65 SELECT B/2A
需要的结果:
- N-RX ABCD
- 组选项 -01
- 优势 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 十六进制值,您将需要相应地进行调整。