我试图在过去7天内找到不包含01的设备: 我已经尝试过“Where column Not'%01:%'”,但它只删除01:并且仍显示过去7天内具有01:的机器。
我有一个名为devices的表。每个位置都有一个唯一的ID号。每个设备在凌晨1点和7点运行工作。设备应该每周01:00:00有1个条目,然后每周19:00:00有3个条目。细胞数据的例外是2017-10-23 19:00:02。
所以我从
开始Select * From devices
Where locationid=##
AND jobdate < DATE_SUB(NOW(), INTERVAL 7 DAY))
AND jobdate not like '%01:%'
我得到的结果是2天前01:00运行的机器。作业日期显示为19:00所以听起来它只是删除了01:。
我正在考虑对作业数据进行分组,然后列出没有2017-10-23 01:00:02的计算机。
答案 0 :(得分:0)
以下建议有很多直觉,后面会有更多的直觉。
大多数数据库实际上不存储日期/时间信息是一种所见即所得的方式。事实上,如果你仔细考虑它,你会明白日期/时间确实是&#34;数字和#34;。这就是为什么我们可以做一些事情,比如计算从date1到date2的天数等等。所以,如果数据存储为datetime data type
不要尝试使用{{针对日期时间列的1}}(用于文本)。而是查找可能适用于您的情况的日期和时间相关功能。在这里,您正在寻找不等于一天中的特定时间(我认为)。所以,删除&#34; date&#34;从考虑转换为&#34;时间&#34;,然后你可以过滤它。
下面,我介绍一个新列LIKE
,它是jobtime
的时间部分,然后我查找任何不等于给定值的列。
MySQL 5.6架构设置:
jobdate
查询1 :
CREATE TABLE Devices
(`locationid` varchar(2), `jobdate` datetime)
;
INSERT INTO Devices
(`locationid`, `jobdate`)
VALUES
('##', '2017-10-23 01:00:00'),
('##', '2017-10-23 19:00:02')
;
<强> Results 强>:
select
*
from (
select locationid, cast(jobdate as time) jobtime, jobdate
from devices
) d
where locationid = '##'
and jobtime <> '01:00:00'
;
...
为什么会出现直觉&#34;以上?(&#34;以后更多&#34;)
不知道哪个数据库正在使用是非常令人沮丧的,因为供应商之间的语法差异很大。了解| locationid | jobtime | jobdate |
|------------|----------|----------------------|
| ## | 19:00:02 | 2017-10-23T19:00:02Z |
的 EXACT data type
也很重要 - 因为如果它是varchar,例如我在上面的查询中完全愚弄了自己。换句话说,我们不太可能回答,因为缺少关键事实。
最后,你有数据!它已经在你的桌子上了。为什么不通过共享它来让每个人都轻松一点?提供&#34;样本数据&#34;与您的问题,以及&#34;期望的结果&#34;也是(即提供两件事,而不是另一件事,并且不使用数据图像 !!!)。希望您可以从上面的示例中看到有用的示例数据和数据。结果是。例如,如果我的直觉偏离了,你可以瞬间告诉它 - 即使你没有读过SQL。
Rant over,并非此处提出的所有观点都适用于此问题。