mysql - SQL - 日期介于(xxxx-06-21 和 xxxx-09-21)之间

标签 mysql sql search

如何使用 MySQL 中的 BETWEEN 函数来搜索任何 年但在特定日期/月份到特定日期/月份之间的日期?或者,如果无法使用 BETWEEN,我还能如何完成它?

为了更具描述性,我正在尝试向我的照片存档网站添加季节性搜索。因此,如果用户选择搜索“夏季”照片,它会搜索在 6 月 21 日至 9 月 21 日之间拍摄的照片,但可以是任何年份的照片。

如果 Carlsberg 做了 SQL,我想会是 :)

WHERE date BETWEEN 'xxxx-06-21' AND 'xxxx-09-21'

非常感谢

最佳答案

别处给出的解决方案,WHERE date.MONTH() || date.DAY() BETWEEN '0621' AND '0921',是一个很好的(它非常值得投票,因为它适用于大多数 MySQL 数据库)但我想指出它(以及大多数查询涉及每行函数的)不会很好地扩展到大表。

当然,根据我的经验,MySQL 并不经常用于会产生巨大差异的大小,但如果是,您还应该考虑以下因素。

我们过去使用的一个技巧是将额外的列与插入/更新触发器相结合,以便计算成本仅在必要时(数据更改时)发生,而不是在每一次选择。

由于绝大多数数据库的读取频率远高于写入频率,因此这会摊销所有选择的成本。

例如,添加一个名为 MMDD 的新列 CHAR(4) 并在其上创建索引。然后在表上设置插入/更新触发器,以便使用 date 列来设置这个新触发器,基于已经提供的公式,date.MONTH() ||日期.DAY().

然后,在进行查询时,跳过每行函数,而是使用:

WHERE MMDD BETWEEN '0621' AND '0921'

它的索引将使速度保持快得令人眼花缭乱,插入/更新和额外列期间的触发器成本很小。

触发器的成本是无关紧要的,因为它比为每个选择操作执行它的成本要低。列所需的额外存储是一个缺点,但是,如果您检查人们询问的有关数据库的所有问题,速度问题与存储问题的比率相当高:-)

而且,虽然这在技术上“破坏”了 3NF,因为您复制了数据,但出于性能原因这样做是一个历史悠久的传统,如果您知道自己在做什么(即触发器减轻“损害”)。

关于mysql - SQL - 日期介于(xxxx-06-21 和 xxxx-09-21)之间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7591722/

相关文章:

MySQL 返回 : errno: 150 - foreign key error

sql - 如何创建一个 SQL 列,其值取决于(映射到)现有查找列的值?

ios - 键入时搜索大型 Core-Data 数据集

mysql - 如何优化两个表的搜索?

java - 查找字符串的超字符串的最快数据结构?

mysql - Mysql中如何删除重复行,条件是另一列为空

mysql - 如果在表中找不到数据字段,则返回值 0 或 0.00 - MySql

php - 尝试解析此 php 脚本以将信息从 html 表单添加到我的 MYSQL 数据库时出现 500 错误

MySQL 合并表,值为零

c# - 彩票入场方式