php - mysql 零值和空值

标签 php mysql

在表中,某些记录的特定字段中有值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/

相关文章:

php - 错误 1215;不断收到此外键错误

java - 在 PHP 和 Java 中使用套接字

MySQL查询超过3个表

java - 尝试将定义为 PreloadedImage 的图像写入 MySQL 时出错

java - JSP mysql 连接没有关闭,但是在 Java 类中它会关闭

php - 这是哪种图像格式?

php - 如何检查 Couchbase 中是否存在 key ?

php - 使用 and 过滤 mysql 内连接一对多结果

mysql - sql - UNION ALL 和另一侧的内连接

php - 如何使用 PDO 的 try-catch block