Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL从今天开始选择*_Mysql_Date_Mysql Workbench - Fatal编程技术网

MySQL从今天开始选择*

MySQL从今天开始选择*,mysql,date,mysql-workbench,Mysql,Date,Mysql Workbench,我正在运行一个简单的代码来检查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 怎么了?也许我只需要记下日

我正在运行一个简单的代码来检查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? 如果是这样的话,我该怎么做呢?

“使用此格式”听起来像是将日期时间值存储为字符串类型(例如,
VARCHAR
),而不是使用专门用于存储日期时间值的MySQL
datetime
数据类型。(但也许我正在阅读更多关于“使用这种格式”和奇怪的dd-Monthname-2位数字年份的文章。)

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())

如果我们想使用MySQL日期/日期时间操作,我们可以使用
STR\u to\u date
函数将字符串值转换为实际的
datetime
数据类型

我们可以测试选择列表中的表达式,这样我们就可以看到实际发生的情况

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

问:如果我改变。。。表上[lastconnected column]的数据类型-数据将发生什么变化?我需要重新输入吗?或者它会独自改变它

为了避免“擦除”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
设置为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() , ... )
更正插入代码后,可以删除字符串列,并重命名新列。(如果
lastconnected
是索引中的一列,这将更加复杂。)


你好说你的代码没有运行是不够的,告诉我们错误=)在对其使用日期函数之前,使用
DATE\u FORMAT
指定你的格式。is不做任何事情….:-)我运行该命令并注意到“使用此格式”听起来像是将日期时间值存储为字符串类型(例如,
VARCHAR
),而不是使用专门用于存储日期时间值的MySQL
datetime
数据类型。(但可能我对“使用此格式”和dd-Monthname-2位数字年份的理解比保证的要多。)@spencer7593-是的,我将数据保存为字符串,那么该怎么办?如何修复?如果我把它保存在表上的数据类型中,数据会发生什么变化?我需要重新输入吗?或者它会独自改变它?谢谢,在我问之前,我有两种选择——它们都不返回任何东西。我想问题可能是lilke@spencer说的,数据被删除为日期而不是字符串……我在本地也尝试过同样的方法。它使用类型转换DATETIME和VARCHAR进行工作查找。我得到了结果。找到记录。你怎么写日期?像我一样?“2018年5月25日16:20:00”您的日期应为Y-m-d H:i:s格式。否则DATE()函数不起作用“问题”是-这就是设备显示日期+时间的方式,我突然读到它,无法更改它。如果我将varchar更改为DATE-它会给我错误吗?我需要在表格设置中将varchar更改为DATE吗?我已经运行了第一部分-但它没有打印nothing@Korenron:更改列的数据类型不是强制性的,但是将列定义为正确的类型将更高效、更方便。如果我的答案中的第一个查询没有返回任何行,那么表中可能没有行,或者发生了某种错误。(第一个查询不包括WHERE子句,因此我们可以返回行,并“查看”表达式的结果。使用STR_TO_DATE函数,我们需要告诉MySQL我们要传递的字符串的格式。这些格式在MySQL参考手册中有文档记录。)好的-我看到这将是一个问题:),所以让我们从头开始。。。我进入sql的格式无法更改(这是我从设备获得它的方式)。现在,如果我添加一个新行作为data type=Date,而不是varcahr45,那么我可以使用Date compare sql函数吗?@Korenron:我们可以使用
STR_to_Date
函数将字符串转换为
DATETIME
。我们可以在INSERT语句中进行转换。。。我们可以将其转换为DATETIME并存储为DATETIME列。(这是规范模式)。这样,我们就可以获得数据验证、效率以及MySQL内置处理DATETIME的便利性。
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() , ... )
-- remove old column
ALTER TABLE databases.devices
  DROP lastconnected ;

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