我需要将地址列拆分为streetName和streetNumber。问题有时是位于streetName列中的完整地址,有时也位于streetNumber列中。我正在使用此代码进行拆分
    replace(streetName, substring_index(streetName, ' ', -1), '') as street,substring_index(streetName, ' ', -1) as number


    replace(streetNumber, substring_index(streetNumber, ' ', -1), '') as street,substring_index(streetNumber, ' ', -1) as number.

我要做的是,如果streetName为null或为空,请运行select查询语句的这一部分,并使用streetNumber执行代码,反之亦然。

我必须在存储过程中区分ifStreet()和IfStreetNumber()。但是我在运行它时遇到错误,并且如果我直接将代码放在case语句中,它也无法正常工作。我收到一条错误消息,说明您的SQL语法有错误。是否可以根据条件运行查询,或者我的方法有什么问题?谢谢,

  SELECT
    firstName,
    lastName,
    D.email AS email,
    streetName,
    streetNumber,
    zipCode,
    city,
    IF(length(zipCode) =5,'Germany','') As country,
    registeredOn,
    N.email AS matchedEmail,
     CASE
        WHEN gender = 'Frau' OR gender = 'f' THEN 'f'
        WHEN gender = 'Herr' OR gender = 'm' THEN 'm'
        ELSE ''
    END AS Title,
    CASE
        WHEN gender = 'Frau' OR gender = 'f' THEN 'Frau'
        WHEN gender = 'Herr' OR gender = 'm' THEN 'Herr'
        ELSE ''
    END AS Salutation,
    CASE
        WHEN streetName !='' THEN
          call ifStreet()
    ELSE
           call ifStreetNumber()
    END

FROM
    matchFiles.TableA AS D
        INNER JOIN
    matchFiles.TableB AS N ON D.email = N.email
WHERE
    registeredOn <= '2018-08-31';

最佳答案

SELECT语句中不允许使用存储过程。因此,您的方法将行不通。

尝试将逻辑从存储过程转换为适当的子查询。

关于mysql - 如果条件为真,则运行MySQL查询,否则运行另一个查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55516578/

10-13 09:31