3

假设我们有字段: id | 内容 | 更新时间 | 创建时间

插入完成后,updateTime 和 creationTime 都会被当前时间填充。在更新时,只有 updateTime 字段被更改。当我需要查找在“2012-06-28”上创建的所有数据时,我只需使用:

SELECT id, content FROM tbl WHERE creationTime LIKE '2012-06-28%'`

但是要获取所有更新的数据,不包括创建的数据,我需要使用这样的东西:

SELECT id, content FROM tbl WHERE creationTime LIKE '2012-06-28%' AND creationTime != updateTime

这显然行不通。虽然我可以通过比较 php 中两个“时间”列的值来找到所有更新的数据,但我仍然喜欢在查询中进行。

UPD:好吧,事实证明我完全不知道 sql 不仅允许将字段的值与给定的变量数字进行比较......而且它还可以将一个字段的值与另一个字段的值进行比较。

4

3 回答 3

8

<>改为使用!=(与某些 DMBS 不兼容)

所以

SELECT id, content 
FROM tbl 
WHERE creationTime LIKE '2012-06-28%' AND creationTime <> updateTime

如果你想要一些文档,你可以在这里找到

但是,您的查询必须与!=

于 2012-06-28T09:47:35.983 回答
3

您的查询是正确的(在 mySQL¹ 上),不知道您为什么会这么想

¹<>是不等于的 SQL 运算符。但是,它的一些实现(例如 PostgreSQL 或 MySQL)!=也可以接受。<>如果您曾经在不同的数据库上使用您的代码,那么始终使用它来避免问题是一个很好的做法。

于 2012-06-28T09:49:30.857 回答
1

只需将 not 运算符从更改!=<>

SELECT id, content FROM tbl WHERE creationTime LIKE '2012-06-28%' AND creationTime <> updateTime
于 2012-06-28T09:48:41.133 回答