Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql REGEXP提供不同的输出_Sql_Regex - Fatal编程技术网

Sql 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

我使用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
                  || 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:]]+.