mysql选择*从今天开始

cyvaqqii  于 2021-06-23  发布在  Mysql
关注(0)|答案(2)|浏览(343)

我正在运行一个简单的代码,它检查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

怎么了?也许我只需要约会?25.5.18? 如果是-我怎么做?

ssgvzors

ssgvzors1#

You make a mistake in**Date((now))**instead of**Date(now())**

Try this:Given all record instead of today
select IP From database.devices where DATE(LastConnected) != Date(now())

Given all record of today
select IP From database.devices where DATE(LastConnected) = Date(now())
wdebmtf2

wdebmtf22#

“使用这种格式”听起来像是将日期时间值存储为字符串类型(例如。 VARCHAR )而不是使用mysql DATETIME 专门设计用于存储日期时间值的数据类型(但也许我在读更多关于“使用这种格式”和奇怪的dd-monthname-two-digital-year的内容,而不是所允许的。)
如果我们想使用mysql date/datetime操作,我们可以将字符串值转换为实际值 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子句中使用它们
要返回具有lastconnected字符串的行,该字符串表示“在”当前日期的日期时间,可以执行以下操作:

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

问:如果我改变。。。表上的数据类型[最后连接的列]-数据将发生什么变化?我需要重新输入吗?或者它会单独改变它?
为了避免“擦除”lastconnected列的内容,我们可以添加另一个适当类型的列,并从现有列中设置值。
如果表是一组大小合理的行,我们可以

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 设置为空。
如果我们想在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() , ... )

更正插入代码后,可以删除string列,并重命名新列(如果 lastconnected 是索引中的列。)

-- remove old column
ALTER TABLE databases.devices
  DROP lastconnected ;

-- rename column
ALTER TABLE databases.devices
  CHANGE dt_lastconnected lastconnected DATETIME ;

相关问题