我正在运行一个简单的代码来检查ping并从SQL获取IP地址。
我希望代码只针对我今天没有看到的代码运行,所以每次运行它都会从列表中删除他已经得到答案的IP地址,但MySQL命令对我不起作用。
这是我找到的命令:
select
IP
From
database.devices
where DATE(LastConnected) != Date((now))
我在数据库中保存的数据使用以下格式:
25-may-18 14:30:21
dd-mm-yy hh:mm:ss
有什么问题?也许我只需要约会? 18年5月25日?如果是这样 - 我该怎么做?
答案 0 :(得分:0)
scala> val resultSet = List(1,2,3,4).permutations.map(x => x.sliding(2,2).toSet).flatten.map(z => z.sorted).toSet.toList
resultSet: List[List[Int]] = List(List(3, 4), List(1, 2), List(2, 3), List(1, 4), List(2, 4), List(1, 3))
scala> resultSet.reverse.sliding(2,2).toList
res1: List[List[List[Int]]] = List(List(List(1, 3), List(2, 4)), List(List(1, 4), List(2, 3)), List(List(1, 2), List(3, 4)))
答案 1 :(得分:0)
“使用此格式”使得它听起来像我们将日期时间值存储为字符串类型(例如VARCHAR
)而不是使用MySQL DATETIME
数据类型,这是专门设计为存储日期时间值。 (但也许我正在阅读“使用这种格式”和奇怪的dd-Monthname-two_digit_year,而不是保证。)
如果我们想使用MySQL日期/日期时间操作,我们可以使用DATETIME
函数将字符串值转换为实际的STR_TO_DATE
数据表。
我们可以在选择列表中测试表达式,这样我们就能看到实际发生的事情......
SELECT d.lastconnected
, STR_TO_DATE(d.lastconnected,'%d-%b-%y %T') AS lc_datetime_
, DATE(NOW())
, DATE(NOW()) + INTERVAL 1 DAY
FROM database.devices
一旦我们测试了表达式,我们就可以在WHERE子句中使用它们
要返回具有最后连接字符串的行,该字符串表示当天“当天”的日期时间,我们可以执行以下操作:
SELECT d.lastconnected
, STR_TO_DATE(d.lastconnected,'%d-%b-%y %T') AS lc_datetime_
, ...
FROM database.devices d
WHERE STR_TO_DATE(d.lastconnected,'%d-%b-%y %T') >= DATE(NOW()) + INTERVAL 0 DAY
AND STR_TO_DATE(d.lastconnected,'%d-%b-%y %T') < DATE(NOW()) + INTERVAL 1 DAY
如果dt_lastconnected
是DATETIME
列,我们的查询可以对以dt_lastconnected
作为前导列的索引使用有效的范围扫描操作:
SELECT ...
FROM database.devices d
WHERE d.dt_lastconnected >= DATE(NOW()) + INTERVAL 0 DAY
AND d.dt_lastconnected < DATE(NOW()) + INTERVAL 1 DAY
问:如果我在表格上更改了...... [最后连接列]的数据类型 - 数据会发生什么?我需要重新进入吗?或者它会单独改变它?
为了避免“擦除”最后连接列的内容,我们可以添加另一个相应类型的列,并设置现有列的值。
如果表格是一组合理大小的行,我们可以
ALTER TABLE database.device ADD dt_lastconnected DATETIME
;
UPDATE database.device
SET dt_lastconnected = STR_TO_DATE(d.lastconnected,'%d-%b-%y %T')
;
这将转换它可以的任何值。具有lastconnected
值且无法解析为有效日期时间的行将dt_lastconnected
设置为NULL。
如果我们想在INSERT语句中填充新列,我们需要以适当的格式提供值,YYYY-MM-DD HH:MI:SS
例如。
INSERT INTO databases.device ( ... , dt_lastconnected , ... ) VALUES
( ... , '2018-05-25 18:35:15' , ... )
, ( ... , STR_TO_DATE('25-May-2018 18:35:15','%d-%b-%y %T') , ... )
, ( ... , NOW() , ... )
一旦我们更正了INSERT代码,我们就可以删除字符串列,并重命名新列。 (如果lastconnected
是索引中的列,则会更复杂。)
-- remove old column
ALTER TABLE databases.devices
DROP lastconnected ;
-- rename column
ALTER TABLE databases.devices
CHANGE dt_lastconnected lastconnected DATETIME ;