在表中,某些记录的特定字段中有值zero(0)
,但是当我使用查询来避免该字段中的空值时,它不会考虑值为 0 的字段。如何克服这个问题?
SELECT
*
FROM wr
WHERE dir <> ''
AND UNIX_TIMESTAMP(CONCAT(date, ' ', time))
BETWEEN '$time_start_unix' AND '$time_end_unix
字段 dir 是一个小数字段,有两位小数。值可以为空,也可以为 0 到 360
。我不需要空白或空值,但需要零值记录
最佳答案
假设dir
是一个不可为空的数字列,那么您应该看到的唯一值就是数字。因此WHERE
条件:
WHERE dir <> ''
在高层上没有意义,因为您正在尝试将数字与空字符串进行比较。在数据库级别,MySQL 似乎为 x <> ''
返回 false。每当x
为零,否则为真。因此,您的 2 条记录为 dir
具有零值的被过滤掉。关于 dir
的值没有个空记录。但是,由于您将默认值设置为 0.0
,如果您看到零值,并且业务逻辑中的任何内容都不会使用该值进行更新,那么以下查询可能就是您想要的:
SELECT *
FROM wr
WHERE dir <> 0.0 AND
UNIX_TIMESTAMP(CONCAT(date, ' ', time))
BETWEEN '$time_start_unix' AND '$time_end_unix
我创建了一个 fiddle ,在这里演示这一点:
SQLFiddle
关于php - mysql 零值和空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38973071/