mysql - 如何在参数之间组合多个
问题描述
我想在表中创建一个额外的列。目的是为邮政编码在 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
解决方案
这不是一个答案。只是为了解释:
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
.
推荐阅读
- docker - 如何在没有域名的 DigitalOcean Docker Droplet 上安装 SSL?
- python - 如何在熊猫中基于多个分隔符将列中的数据拆分为多列
- reactjs - TypeError:this.state.edit 不是函数
- r - 如何使用 R 中某个数据集的摘要进行线性回归?
- c# - 优化用于在 Richtextbox 窗体中搜索文本的代码
- google-cloud-platform - 从 GCP 数据目录获取信息
- symfony - 带有 SMTP 和证书 ssl 的 Symfony Mailer 问题无效
- apache-spark - 在 pyspark 中读取 Excel (.xlsx) 文件
- javascript - 在列表框中生成“选定”的 html 标记
- vugen - 重播无法开始查看 vugen 日志以获取更多详细信息 - 重播 vugen 时出错