对于准确日期的模糊搜索,您不需要单独存储每个部分。您可以调整 where 子句。对于 2012 年的所有内容:
SELECT * FROM yourtable
WHERE yourtime >= '2012-01-01' AND yourtime < '2013-01-01'
如果你想要一个特定的日子:
SELECT * FROM yourtable
WHERE yourtime >= '2012-07-28' AND yourtime < '2012-07-29'
或特定时间:
SELECT * FROM yourtable
WHERE yourtime >= '2012-07-28 13:00:00' AND yourtime < '2012-07-28 14:00:00'
为了使所有这些查询高效,您可以向时间戳列添加索引。
关于如何存储模糊日期,一种选择是有一个日期范围:
id taken_from taken_to title
1 2011-01-01 00:00:00 2012-01-01 00:00:00 a pic of my car last year
对于模糊日期的模糊搜索,您可以执行以下操作:
在伪 SQL 中:
SELECT
*,
(LEAST(@to, taken_to) - GREATEST(@from, taken_from)) /
(GREATEST(@to - taken_to) - LEAST(@from, taken_from)) AS relevancy
FROM yourtable
WHERE taken_to >= @from AND taken_from < @to
您可能希望按相关性进行排序,并且您可能希望包括其他因素,例如某些搜索词的全文搜索返回的相关性。