我已经使用REGEXP查找文本模式,但是其中一部分存在问题。我想将票务票价计算行归类为仅包含以下标签之一:
SQL下面:
SELECT JOUR.JOUR_FSERNR
AS TICKET,
CASE
WHEN REGEXP_LIKE (
JOUR.JOUR_FCA1LN
|| JOUR.JOUR_FCA2LN
|| JOUR.JOUR_FCA3LN
|| JOUR.JOUR_FCA4LN,
'Q[[:space:]][[:alpha:]]{6}')
THEN
'QPRO'
WHEN REGEXP_LIKE (
JOUR.JOUR_FCA1LN
|| JOUR.JOUR_FCA2LN
|| JOUR.JOUR_FCA3LN
|| JOUR.JOUR_FCA4LN,
'Q[[:digit:]]+\.[[:digit:]]+.*END')
THEN
'QCPN'
WHEN REGEXP_LIKE (
JOUR.JOUR_FCA1LN
|| JOUR.JOUR_FCA2LN
|| JOUR.JOUR_FCA3LN
|| JOUR.JOUR_FCA4LN,
'Q[[:space:]][[:alpha:]]{6}')
AND REGEXP_LIKE (
JOUR.JOUR_FCA1LN
|| JOUR.JOUR_FCA2LN
|| JOUR.JOUR_FCA3LN
|| JOUR.JOUR_FCA4LN,
'[[ALPHA]]{3}Q[[:digit:]]+\.[[:digit:]]')
THEN
'QBOTH'
ELSE
NULL
END
AS QTYPE,
( (JOUR.JOUR_FCA1LN || JOUR.JOUR_FCA2LN) || JOUR.JOUR_FCA3LN)
|| JOUR.JOUR_FCA4LN
AS FARECALC
FROM "S00BJOUR" JOUR
WHERE JOUR.JOUR_FSERNR = '9999889652'
如果您查看上述SQL并找到了输出'QCPN'的CASE WHEN行,您将看到一个“ END”文本字符串'Q[[:digit:]][[:graph:]]END'
。我在其中输入“ END”,因为我只希望REGEXP在票价计算行中位于“ END”的左侧。
但是它给了我一些不正确的输出,如所附图像Incorrect Outputs in RED中所示:
感谢您提供任何纠正此问题的帮助。
答案 0 :(得分:0)
感觉很奇怪,您没有放置太多的量词。像QCPN一样,无论意味着什么:
Q[[:digit:]]{2}\.[[:digit:]]{2}
至少要与您的Q20.00示例匹配。
编辑:
在您的“ with end exemple”中,没有用,因为您没有放置任何量词:
Q[[:digit:]][[:graph:]]END
#Match Q5.END, Q22END, Q8AEND
#Dont match Q20.00 END
但是:
Q[[:digit:]]+\.[[:digit:]]+.*END
#Match "Q1.2 ZA VD END Q20.2"
#Dont match "Q5.END", "BF END Q10.25"
对于第二个问题QPRO / QBOTH,问题是:
Q HAMAOQ20.00
尝试
[[:space:]]Q[[:digit:]]+\.[[:digit:]]+.
对于QCPN正则表达式。