Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.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 将日期时间模式“y-M-d H:M:s”选择条件与日期类型进行比较_Mysql_Date_Datetime - Fatal编程技术网

Mysql 将日期时间模式“y-M-d H:M:s”选择条件与日期类型进行比较

Mysql 将日期时间模式“y-M-d H:M:s”选择条件与日期类型进行比较,mysql,date,datetime,Mysql,Date,Datetime,我有一个sql查询,它说: 从学生签名中选择*符号,其中signStu.is\u deleted=0,signStu.student\u wid=1000363408,signStu.attention\u date>=2019-12-26 13:00:00.0 列Attention_date是日期类型,sql结果不包含Attention_date=2019-12-26。所以我认为2019-12-26 13:00:00.0不会像2019-12-26那样转换为日期类型 但考勤日期也是一个索引,sq

我有一个sql查询,它说:

从学生签名中选择*符号,其中signStu.is\u deleted=0,signStu.student\u wid=1000363408,signStu.attention\u date>=2019-12-26 13:00:00.0

列Attention_date是日期类型,sql结果不包含Attention_date=2019-12-26。所以我认为2019-12-26 13:00:00.0不会像2019-12-26那样转换为日期类型

但考勤日期也是一个索引,sql查询可以使用该索引。 那么,如果2019-12-26 00:00:00.0未转换为日期类型,我该如何实现

我想知道的是2019-12-26 00:00:00.0将被转换为与考勤日期进行比较的类型,或者当日期、日期时间、时间戳类型与yyyy-MM-dd HH:MM:ss模式字符串格式进行比较时,mysql会做什么。

如果考勤日期是一个仅限日期的列,那么在将其与时间戳文本进行比较的上下文中,它将作为该日期午夜的时间戳。因此,假设存在一个考勤日期值为2019-12-27的记录,则WHERE条款将变为:

WHERE ... AND '2019-12-27 00:00:00' > '2019-12-26 13:00:00.0'
               ^^^ the attendance "date"

根据您想要的逻辑,您可能必须更改WHERE子句以使用考勤日期的某些派生项。

使用带有列的日期函数,然后您可以进行比较

Like-DatesignStu.attention\u日期

我所知道的2019-12-26 00:00:00.0是将日期日期时间戳类型与“yyy-MM-dd HH:MM:ss”模式字符串进行比较时,转换为要与考勤日期进行比较的类型,或者mysql将做什么

当操作数在比较操作中具有不同但兼容的数据类型时,它们将转换为相同的数据类型,从而保证不会发生数据丢失或更改

因此,在这种情况下,日期类型值将转换为日期时间类型,而不是将“2019-12-26 13:00:00.0”向后转换为日期将改变该值

为了得到你需要的结果,文字真的是一个参数吗?您可以显式地将文本转换为数据类型:

and signStu.attendance_date >= DATE('2019-12-26 13:00:00.0')
使用mysql DATE_FORMAT函数进行如下查询
日期格式签到日期,%Y-%m-%d%H.%i.%s'>=日期格式2019-12-26 13:00:00.0,%Y-%m-%d%H.%i.%s'>=这是否回答了您的问题?使用函数与列,然后您可以进行比较。这防止了索引的使用并降低了性能。好的,它转换为时间戳时间,但有人告诉我隐式类型转换不会使用索引,因为考勤日期是日期类型,但只要考勤日期没有包装在任何类型的函数调用中,此sql就可以使用考勤日期的索引,该列至少可以作为使用索引的候选列。至于MySQL是否会实际使用任何索引,这取决于您的数据和解释计划。您说它将作为时间戳,是指考勤日期转换为时间戳,而不是日期时间类型我不知道实现细节。我想说的是,将日期与时间戳文字进行比较是完全合法的。正如我的回答所说,在这种情况下,日期将表现为同一日期的时间戳,时间部分设置为午夜。你怎么知道它会转换为DATETIME类型,而不是Tim Biegeleisen写的@Tim Biegeleisen的时间戳呢?你不妨写在。。。“和考勤日期>'2019-12-26',@qijun字段和文字均不包含时区信息。”。因此DATETIME是与字段和文字兼容的最接近的数据类型。此外,DATETIME更广泛,此数据类型的许多值根本无法转换为时间戳。当然,内部服务器代码可能会在时间戳中执行日期时间类型比较,但我在文档中没有看到此类信息。@TimBiegeleisen我认为显示的文字确实是一个参数,我在回答中询问了这一点。@Akina是的;你所做的没有错,但我认为在MySQL上没有必要这样做。