mysql在出现数字后删除任何内容(包括数字)

时间:2014-09-11 23:20:35

标签: mysql substring

我在MYSQL中有一个查询,它会删除以下字符之后的所有内容。 '/'和' - ',代码如下:

CASE

    WHEN LOCATE('.', wca.scexh.LocaLcode)>0 THEN SUBSTRING_INDEX(wca.scexh.LocaLcode, '.', 1)
    WHEN LOCATE('/', wca.scexh.LocaLcode)>0 THEN SUBSTRING_INDEX(wca.scexh.LocaLcode, '/', 1)
    WHEN LOCATE('-', wca.scexh.LocaLcode)>0 THEN SUBSTRING_INDEX(wca.scexh.LocaLcode, '-', 1)

    ELSE wca.scexh.LocaLcode

END as LocaLcodeNew,

但是我还想添加一个额外的case语句,它会在数字出现时立即删除任何内容,我尝试了下面的case语句,但似乎不起作用:

CASE

    WHEN LOCATE('.', wca.scexh.LocaLcode)>0 THEN SUBSTRING_INDEX(wca.scexh.LocaLcode, '.', 1)
    WHEN LOCATE('/', wca.scexh.LocaLcode)>0 THEN SUBSTRING_INDEX(wca.scexh.LocaLcode, '/', 1)
    WHEN LOCATE('-', wca.scexh.LocaLcode)>0 THEN SUBSTRING_INDEX(wca.scexh.LocaLcode, '-', 1)
    WHEN LOCATE('0', wca.scexh.LocaLcode)>0 THEN SUBSTRING_INDEX(wca.scexh.LocaLcode, '0', 1)
    WHEN LOCATE('1', wca.scexh.LocaLcode)>0 THEN SUBSTRING_INDEX(wca.scexh.LocaLcode, '1', 1)
    WHEN LOCATE('2', wca.scexh.LocaLcode)>0 THEN SUBSTRING_INDEX(wca.scexh.LocaLcode, '2', 1)
    WHEN LOCATE('3', wca.scexh.LocaLcode)>0 THEN SUBSTRING_INDEX(wca.scexh.LocaLcode, '3', 1)
    WHEN LOCATE('4', wca.scexh.LocaLcode)>0 THEN SUBSTRING_INDEX(wca.scexh.LocaLcode, '4', 1)
    WHEN LOCATE('5', wca.scexh.LocaLcode)>0 THEN SUBSTRING_INDEX(wca.scexh.LocaLcode, '5', 1)
    WHEN LOCATE('6', wca.scexh.LocaLcode)>0 THEN SUBSTRING_INDEX(wca.scexh.LocaLcode, '6', 1)
    WHEN LOCATE('7', wca.scexh.LocaLcode)>0 THEN SUBSTRING_INDEX(wca.scexh.LocaLcode, '7', 1)
    WHEN LOCATE('8', wca.scexh.LocaLcode)>0 THEN SUBSTRING_INDEX(wca.scexh.LocaLcode, '8', 1)
    WHEN LOCATE('9', wca.scexh.LocaLcode)>0 THEN SUBSTRING_INDEX(wca.scexh.LocaLcode, '9', 1)

    ELSE wca.scexh.LocaLcode

END as LocaLcodeNew,

我非常感谢你提供任何帮助,提前谢谢!

以下示例目前与我所拥有的案例陈述一样,因为我不再看/。或 - 在任何代码中:

DOW.11显示为DOW
DOW / 11显示为DOW
DOW-11显示为DOW

但是还需要提供以下示例:

DOW0123显示为DOW
DOW2345显示为DOW
DOW3456显示为DOW

请记住,每个代码的随机字母/数字并不总是相同的字符数。

1 个答案:

答案 0 :(得分:1)

CASE按顺序执行WHEN测试,并在其中一个匹配时立即停止。因此,如果您之前的专栏中有较晚的匹配,则不会删除整个内容。您需要嵌套函数,而不是按顺序测试。将CASE表达式替换为:

       SUBSTRING_INDEX(
        SUBSTRING_INDEX(
         SUBSTRING_INDEX(
          SUBSTRING_INDEX(
           SUBSTRING_INDEX(
            SUBSTRING_INDEX(
             SUBSTRING_INDEX(
              SUBSTRING_INDEX(
               SUBSTRING_INDEX(
                SUBSTRING_INDEX(
                 SUBSTRING_INDEX(
                  SUBSTRING_INDEX(
                   SUBSTRING_INDEX(evs.sxech.Localcode, '.', 1),
                    '/', 1),
                   '-', 1),
                  '0', 1),
                 '1', 1),
                '2', 1),
               '3', 1),
              '4', 1),
             '5', 1),
            '6', 1),
           '7', 1),
          '8', 1),
         '0', 1) AS LocalLcodeNew

您不需要LOCATE()测试;如果分隔符不在字符串中,SUBSTRING_INDEX()将返回字符串不变。

DEMO