Sql REGEXP提供不同的输出
我使用REGEXP查找文本模式,但其中一部分有问题。我想将票价计算线归类为只有以下标签之一:Sql REGEXP提供不同的输出,sql,regex,Sql,Regex,我使用REGEXP查找文本模式,但其中一部分有问题。我想将票价计算线归类为只有以下标签之一: 空白(无Q附加费) QCPN(仅存在现有格式Q20.00的实例) QPRO(只有新附加格式Q LONSYD20.00的实例) QALETH(有QCPN和QALETH的示例) 下面是SQL: SELECT JOUR.JOUR_FSERNR AS TICKET, CASE WHEN REGEXP_LIKE ( JOUR.JOUR_FCA1LN
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”的行时的情况,您将看到一个“END”文本字符串'Q[[:digit:][[:graph:]END'
。我把'END'放在那里,因为我只想让REGEXP在票价计算行中看'END'的左边
但它给了我一些不正确的输出,如附图所示:
非常感谢您为纠正此错误提供的任何帮助。感觉很奇怪,您没有添加这么多的量词。与QCPN一样,它的含义应该是:
Q[[:digit:]]{2}\.[[:digit:]]{2}
至少与您的Q20.00示例相匹配
编辑:
在你的“with end example”中,没有起作用,因为你没有放任何量词:
Q[[:digit:]][[:graph:]]END
#Match Q5.END, Q22END, Q8AEND
#Dont match Q20.00 END
但是:
对于第二个问题,QPRO/QBETH,问题是:
Q HAMAOQ20.00
试一试
对于QCPN regex.您使用的
REGEXP\u LIKE
在我看来是完全错误的。请包括样本数据和输出。您好,蒂姆,请参阅附件中我给出了一些例子的图片。谢谢,你好,拉沃克,非常感谢你的回复。添加量词会进一步返回不正确的输出。QCPN-当字符串中只有一个Q时(例如:AUH EY NYC Q84.17 533.02EOWSTA/GBST NUC617.19END ROE3.672960 XT18.00US3.96XA7.00XY20.42AE9.53F61.36TP1.36ZR)。因此,在这个例子中,只有一个Q是Q84.17.QBOTH——当你有一个带有一些字符的Q和Q时(例如:BJS EY X/AUH Q100.00EY JNB Q BJSJNB 2.50 267.18NUC369.68END ROE6.507700 XT7.10F61.00ZR),所以在这个例子中,Q100.00和Q BJSJNB 2.5你的评论对我来说更混乱。你说“只有一个Q”,但你告诉我们关于Q84.17>?你的代码和它写的完全一样,只匹配“Q5.END”左右,而你没有。顺便说一句,量词只适用于前面的元素。为了回答第二部分(结尾之前的内容),添加一些。*(比如Q[[:digit:][]+\[[:digit:][]+.*end)。非常感谢您的帮助,我使用了您的输入,但它仍然为本例“BJS EY X/AUH Q100.00EY JNB Q BJSJNB 2.50 267.18NUC369.68END ROE6.507700 XT7.10F61.00ZR”提供了不正确的输出在这种情况下,QCPN是Q100.00,QPRO是qbjsjnb 2.50,所以我希望输出都是qq。我已经在上面的原始问题中更新了SQL。
Q HAMAOQ20.00
[[:space:]]Q[[:digit:]]+\.[[:digit:]]+.