首页 > 解决方案 > 如何在参数之间组合多个

问题描述

我想在表中创建一个额外的列。目的是为邮政编码在 2900 和 3199 或 2600 和 2699 之间的所有行提供值“Omgeving Rotterdam”,所有其他邮政编码为“Nederland”,以及所有带有空单元格的行“无邮政编码”。

我尝试了以下代码(但它给了我“添加行的所有单元格中的 Omgeving Rotterdam”)

SELECT *
,case 
    when (LEFT(Postcode,4) between 2900 AND 3199 OR 2600 AND 2699) then 'Omgeving Rotterdam'
    when (LEFT(Postcode,4) IS NOT NULL AND NOT between 2900 AND 3199 OR 2600 AND 2699) then 'Nederland'
    else 'Geen Postcode'
end
as 'Komt Uit'
FROM
    a
        LEFT JOIN
    b ON a.ID = b.code
        JOIN
    c ON c.id_E = a.E_ID

标签: mysqlsqldatabase

解决方案


这不是一个答案。只是为了解释:

when (LEFT(Postcode,4) between 2900 AND 3199 OR 2600 AND 2699) then 'Omgeving Rotterdam'

when LEFT(Postcode,4) between 2900 AND 3199
  OR (2600 AND 2699) then 'Omgeving Rotterdam'

2600 真的不是条件,2699 也不是。但是 MySQL 期望那里的某些条件将整数转换为布尔值(使 0 = false,其他数字 = true)。所以你有了:

when LEFT(Postcode,4) between 2900 AND 3199
  OR (true AND true) then 'Omgeving Rotterdam'

这仅仅是

when true then 'Omgeving Rotterdam'

这就是为什么您的所有结果都是“Omgeving Rotterdam”。

至于:

when (LEFT(Postcode,4) IS NOT NULL AND NOT between 2900 AND 3199 OR 2600 AND 2699) then 'Nederland'

我认为这应该会引发错误。我不知道 mySQL 的解析器是由AND <nothing> NOT between 2900 AND 3199.


推荐阅读