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/sql/82.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_Sql_Date - Fatal编程技术网

Mysql 获取两个给定日期之间的行(包括这些日期上的行)

Mysql 获取两个给定日期之间的行(包括这些日期上的行),mysql,sql,date,Mysql,Sql,Date,我知道这应该很简单,但事实证明它相当复杂,我有两张表: USERS id | name | url COMMENTS id | id_user | text | lang | date(datetime) 我想检索这两个给定日期之间的所有记录注释这两个日期包括我用两种不同的方法尝试过,但它们不起作用,在应该返回结果的地方没有返回结果: 方案A 以下句子不返回任何内容,并且有注释,这两条注释应显示为“2014-01-09 16:34:58”和“2014-01-13 10:09:24” SELE

我知道这应该很简单,但事实证明它相当复杂,我有两张表:

USERS id | name | url

COMMENTS id | id_user | text | lang | date(datetime)
我想检索这两个给定日期之间的所有记录注释这两个日期包括我用两种不同的方法尝试过,但它们不起作用,在应该返回结果的地方没有返回结果:

方案A 以下句子不返回任何内容,并且有注释,这两条注释应显示为“2014-01-09 16:34:58”和“2014-01-13 10:09:24”

SELECT
  comments.text,
  users.url,
  users.name
FROM comments
  JOIN users
    ON comments.id_user = users.id
WHERE comments.date BETWEEN '2014-01-13'
    AND '2014-01-09'
    AND comments.lang = 'es'
ORDER BY comments.date DESC
方案B 以下句子返回在“2014-01-09”日书写的信函,但不返回在“2013-01-09”日书写的信函

SELECT
  comments.text,
  users.url,
  users.name
FROM comments
  JOIN users
    ON comments.id_user = users.id
WHERE comments.date <= '2014-01-13'
    AND comments.date > '2014-01-09'
    AND comments.lang = 'es'
ORDER BY comments.date DESC

我做错了什么

使用此选项,而不是在两者之间使用此选项

SELECT
  comments.texto,
  usuarios.url,
  users.nombre
FROM comments
  JOIN usuarios
    ON comments.id_usuario = users.id
WHERE DATE(comments.date) <= '2014-01-14'
    AND DATE(comments.date) >= '2014-01-09'
    AND comments.lang = 'es'
ORDER BY comments.fecha DESC

更改此项:

WHERE comments.date BETWEEN '2014-01-13' AND '2014-01-09'
为此:

WHERE comments.date BETWEEN '2014-01-09' AND '2014-01-13 23:59:59'
MySQL子句要求正确排列min和max参数,因此必须首先指定较小的值。其次,要包含2014-01-13的记录,您需要添加时间部分datetime中的时间部分不包含毫秒,因此检查23:59:59就足够了。或者你可以写:

WHERE comments.date >= '2014-01-09'
  AND comments.date <  '2014-01-13' + INTERVAL 1 DAY
                   --  ^---------------------------^ evaluates to 2014-01-14

id_usuario id_用户-只需说'-哦,很抱歉,我复制并翻译了所有代码,但我错过了其中的几个!!!这是因为您只考虑DATETIME数据类型的日期部分。我还尝试将时间部分添加到日期的末尾,但结果是相同的…-1。为什么在where子句中指定2014年的日期时会看到2013年的记录,反之亦然?好吧,如果要使用DATE,那么最好返回到BETWEEN@alez这是因为过滤器只关注2013年再次发布的评论,日期更改为2014年。很抱歉,没有这样做。我已经编辑过了,应该是2014年,第二个比较的日期是第13天……是的,在我的回答中试试这个问题,我也编辑并修复了这个作品,完美!!它返回所有的评论,因为它是spected,也感谢最后的澄清,这是非常有益的。
WHERE comments.date >= '2014-01-09'
  AND comments.date <  '2014-01-13' + INTERVAL 1 DAY
                   --  ^---------------------------^ evaluates to 2014-01-14