在MYSQL中,运行多个AND检查或强制转换到日期并使用In检查多个日期外观是否更有效? 我需要做什么
我需要能够检查我的MYSQL数据库,以查看记录是否具有发生在所选日期列表上的开始日期时间。日期范围可能会有间隙,所以我不能只使用一个简单的字段>='12-12-2000 00:00:00和<12-20-2000 00:00:00 我脑子里有两个解决方案,但我没有足够的实际数据来实际测试使用in语句或串联一组AND语句来进行检查是否更有效 目前,我的思考过程让我有两个选择 用于 使用连接的AND语句 这是我提出的两个选择,但是我确信有更多经验丰富的SQL开发人员有更好的方法来完成我正在尝试的工作。我确实读到过,强制转换比只确定开始和结束日期时间慢,但是我不确定这是否仍然适用,即使我可能有5-30个日期来检查每个查询。强制转换方法不能利用datefield列上的索引 当您有一个或条件时,MySQL通常不使用索引,因此可能需要将第二个版本更改为UNION 顺便说一句,您的日期格式是错误的,它们应该是YYYY-MM-DD,而不是MM-DD-YYYY 如果您使用的是MySQL 5.7或更高版本,那么有一种方法可以为CAST版本编制索引。您可以创建一个值为CASTdatefield AS DATE的,并在此列上添加索引。CAST方法不能利用datefield列上的索引 当您有一个或条件时,MySQL通常不使用索引,因此可能需要将第二个版本更改为UNION 顺便说一句,您的日期格式是错误的,它们应该是YYYY-MM-DD,而不是MM-DD-YYYY在MYSQL中,运行多个AND检查或强制转换到日期并使用In检查多个日期外观是否更有效? 我需要做什么,mysql,sql,Mysql,Sql,我需要能够检查我的MYSQL数据库,以查看记录是否具有发生在所选日期列表上的开始日期时间。日期范围可能会有间隙,所以我不能只使用一个简单的字段>='12-12-2000 00:00:00和
如果您使用的是MySQL 5.7或更高版本,那么有一种方法可以为CAST版本编制索引。您可以创建一个值为CASTdatefield AS DATE的字段,并在此列上添加索引。步骤1:将日期/日期时间存储为日期/日期时间步骤1:将日期/日期时间存储为日期/日期时间
SELECT * FROM myTable WHERE
CAST(datefield as Date) IN ('12-12-2000', '12-13-2000', '12-15-2000', '12-20-2000');
SELECT * FROM myTable WHERE
(datefield >= '12-12-2000 00:00:00' AND datefield < '12-13-2000 00:00:00')
OR
(datefield >= '12-13-2000 00:00:00' AND datefield < '12-14-2000 00:00:00')
OR
(datefield >= '12-15-2000 00:00:00' AND datefield < '12-16-2000 00:00:00')
OR
(datefield >= '12-20-2000 00:00:00' AND datefield < '12-21-2000 00:00:00')
SELECT * FROM mytable
WHERE (datefield >= '12-12-2000 00:00:00' AND datefield < '12-13-2000 00:00:00')
UNION ALL
SELECT * FROM mytable
WHERE (datefield >= '12-13-2000 00:00:00' AND datefield < '12-14-2000 00:00:00')
UNION ALL
SELECT * FROM mytable
WHERE (datefield >= '12-15-2000 00:00:00' AND datefield < '12-16-2000 00:00:00')
UNION ALL
SELECT * FROM mytable
WHERE (datefield >= '12-20-2000 00:00:00' AND datefield < '12-21-2000 00:00:00')