【问题标题】:Why does <> operator not work as expected on my varbinary(20) sql data?为什么 <> 运算符在我的 varbinary(20) sql 数据上不能按预期工作?
【发布时间】:2026-01-25 15:40:01
【问题描述】:

我有一个 MySQL 数据库,它包含一个表,其中包含 varbinary(20) 类型的列中的一些数据

不要问我为什么——它就是这样,我需要处理它。

此数据代表学生作为课程的一部分完成的模块数量。还有另一列称为标准,表示必须完成的模块数才能使课程标记为完成。当我计算完成课程的数量时,我想计算

completed = criteria AND completed != 0 ( ...oh and where the student is enrolled)

(因为在某些情况下标准是 0,所以我想跳过学生完成 0 个模块中的 0 个模块的任何课程)。

此外,由于某种原因,varbinary 列中 0 的值是 30(如果有人可以对此提供解释,那就太好了),因此在需要完成 3 个模块的情况下,条件列中的值将是 33

所以我的 SQL 查询看起来像这样 -

count(CASE WHEN (completed <> 30  AND (completed = criterias) AND enrolled = 'Yes') THEN 1 END) AS Total_Complete

但是,此计数似乎包括学生已完成 0 门课程中的 0 门的课程,因此我完成的 30 门课程似乎不起作用。

【问题讨论】:

  • 啊,很好发现 - 是的,我使用的是 ,但我在问题标题中输入了错误的内容。我已更新问题以包含 运算符

标签: sql database comparison operators varbinary


【解决方案1】:

在我写这篇文章时,我回答了我自己的问题,但我想我把它留在这里,以防它帮助其他人。

解决方案是忽略无论出于何种原因 0 都由 30 表示的事实,并将我的 sql 更改为 -

count(CASE WHEN (completed <> 0 AND (completed = criterias) AND enrolled = 'Yes') THEN 1 END) AS Total_Complete

成功了

【讨论】: