SELECT * FROM `objects`
WHERE (date_field BETWEEN '2010-09-29 10:15:55' AND '2010-01-30 14:15:55')
不返回任何内容。
我应该有足够多的数据来使查询工作。我在做什么错?
#1 楼
您的第二个日期早于您的第一个日期(即,您正在查询2010年9月29日至2010年1月30日之间)。尝试颠倒日期顺序:SELECT *
FROM `objects`
WHERE (date_field BETWEEN '2010-01-30 14:15:55' AND '2010-09-29 10:15:55')
评论
我确实知道这一点,但现在有UPDATE问题。我正在尝试使用BETWEEN进行更新,是否应该以相同的方式工作?
–印格斯
17-6-27 at 9:55
@IngusGraholskis:where子句在select或update语句上的作用应相同。
– T30
17年6月30日在12:37
就我个人而言,我发现术语“从”和“到”是一种偷偷摸摸的方式来记住应编写查询的顺序。
– KeaganFouche
19年1月21日在22:04
如果两个日期都为null或为空,如何返回所有数据?
–编码世界
1月22日11:08
#2 楼
您的查询日期应为select * from table between `lowerdate` and `upperdate`
try
SELECT * FROM `objects`
WHERE (date_field BETWEEN '2010-01-30 14:15:55' AND '2010-09-29 10:15:55')
#3 楼
是date_field
类型的datetime
吗?另外,您需要将最早的日期放在首位。应为:
SELECT * FROM `objects`
WHERE (date_field BETWEEN '2010-01-30 14:15:55' AND '2010-09-29 10:15:55')
#4 楼
DATE()是一个MySQL函数,仅提取日期或日期/时间表达式的日期部分。SELECT * FROM table_name WHERE DATE(date_field) BETWEEN '2016-12-01' AND '2016-12-10';
评论
您可以添加一个解释,以便人们理解您在做什么。
–弗朗兹·格莱希曼(Franz Gleichmann)
16 Dec 15'在6:39
#5 楼
作为@sabin答案的扩展,并提示是否仅想比较日期部分(无时间):如果要比较的字段来自datetime类型,并且仅指定了要比较的日期,然后将这些日期在内部转换为datetime值。这意味着以下查询
SELECT * FROM `objects` WHERE (date_time_field BETWEEN '2010-01-30' AND '2010-09-29')
将在内部转换为
SELECT * FROM `objects` WHERE (date_time_field BETWEEN '2010-01-30 00:00:00' AND '2010-09-29 00:00:00')
内部。
这反过来会导致结果不包含时间值大于00:00:00的2010-09-29对象!
因此,如果所有对象都带有日期也应包含2010-09-29,要比较的字段必须转换为日期:
SELECT * FROM `objects` WHERE (DATE(date_time_field) BETWEEN '2010-01-30' AND '2010-09-29')
#6 楼
您可以通过与大于或等于和小于或等于进行比较来手动完成此操作。 select * from table_name where created_at_column >= lower_date and created_at_column <= upper_date;
在我们的示例中,我们需要检索特定日期到天。
我们将从一天的开始到另一天的最新秒进行比较。
select * from table_name where created_at_column >= '2018-09-01 00:00:00' and created_at_column <= '2018-09-05 23:59:59';
#7 楼
使用日期和时间值时,必须将字段强制转换为DateTime
而不是Date
。请尝试:
SELECT * FROM `objects`
WHERE (CAST(date_field AS DATETIME)
BETWEEN CAST('2010-09-29 10:15:55' AS DATETIME) AND CAST('2010-01-30 14:15:55' AS DATETIME))
#8 楼
在服务器端或客户端配置日期可能会出现问题。当我用西班牙语,法语或其他任何方式配置主机时,我发现这是多个数据库上的常见问题...格式为dd / mm / yyyy或mm / dd / yyyy。
评论
问题在于较早的日期早于较新的日期列出。
–theninjagreg
15年6月24日在20:09
#9 楼
只需将date_field转换为日期SELECT * FROM `objects`
WHERE (cast(date_field as date) BETWEEN '2010-09-29' AND
'2010-01-30' )
#10 楼
尝试切换日期:2010-09-29 > 2010-01-30?
评论
请谨慎使用BETWEEN,因为最小值和最大值均被视为在范围内,因此请勿对最小值和最大值(日期大小写)的日期进行两次处理。例如,日期2010-09-29 00:00:00将在2010-09-28 00:00:00和2010-09-29 00:00:00之间,并且在2010-09-29 00之间: 00:00和2010-09-30 00:00:00是的,他说了什么^^