假设我们有字段:id |内容| updateTime |创建时间
插入完成后,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不仅允许将字段的值与给定变量,数字进行比较......而且还可以将一个字段的值与另一个字段的值进行比较。答案 0 :(得分:6)
使用<>
代替!=
(与某些DMBS不兼容)
所以
SELECT id, content
FROM tbl
WHERE creationTime LIKE '2012-06-28%' AND creationTime <> updateTime
如果您需要一些文档you can find here
但是,您的查询必须与!=
答案 1 :(得分:2)
您的查询是正确的(在mySQL¹上),不知道为什么会这样认为
¹<>
是不等的SQL运算符。然而,它的一些实现(例如PostgreSQL或MySQL)也接受!=
。如果您在不同的数据库上使用代码,请始终使用<>
来避免出现问题。
答案 2 :(得分:1)
仅将not运算符从!=
更改为<>
SELECT id, content FROM tbl WHERE creationTime LIKE '2012-06-28%' AND creationTime <> updateTime