2009-09-08 134 views
2

我想写一条查询来查找我的'schedule_items'表中与DATETIME字段的值YYYY-MM-DD匹配的所有项目。查询以查找部分匹配

类似:SELECT * FROM schedule_items WHERE开始?matches? '$date'

的地方开始将是一个DATETIME场数据,如2009-09-23 11:34:00$date会是这样的:2009-09-23

我能做到这一点还是需要加载所有的值,然后爆炸和比较我的DATETIME start字段中的值?

回答

6

您可以像使用MySQL中

SELECT * FROM schedule_items WHERE start LIKE 'some-date%' 

你把一个%符号作为通配符。

请注意,虽然这可能是一个非常沉重的查询。特别是如果你在字符串的开头使用%。

+0

什么行的金额将它变得沉重的? – ian 2009-09-08 18:50:46

+1

这取决于系统。如果你担心。再看看慢查询日志(如果您有它) – 2009-09-08 19:04:05

1

在SQL中,您可以使用LIKE而不是=,然后获得%通配符。例如:

select ... where start like "2009-09-%"; 

(这会从2009年8月与任何内容匹配)

+0

所以我的约会我想匹配是2009-10-09或任何存储在$ YMD可以做我喜欢“$ YMD%” – ian 2009-09-08 18:55:30

+0

是的,这应该工作。只要确保你将mysql_real_escape_string()放入SQL之前从用户那里获得的任何东西。 – JasonWoof 2009-09-08 19:08:18

2

如果您正在使用日期,喜欢它似乎你说:

的地方开始将是一个DATETIME场 与数据一样2009-09-23 11:34:00和 $日期将类似于 2009-09-23

使用LIKE可能不是唯一/最好的解决方案:有处理日期的函数;你也可以使用比较运算符。

在你的情况,你也许可以用这样的:

select * 
from headers_sites 
where date_fetch >= '2009-07-15' 
limit 0, 10 

当然,你必须去适应这个查询到你的表/场;这样的事情可能会做,我想:

SELECT * FROM schedule_items WHERE start >= '$date' 

这会让你获得日期比$ date更近的每个数据。

如果你只想要一个一天的日期,这可以这样做:

SELECT * 
FROM schedule_items 
WHERE start >= '$date' 
    and start < adddate('$date', interval 1 day) 

这可能是比“赞”好,如果你开始列有索引 - 不知道,虽然,但是,仍然,你愿意从你的查询中明白你的意思......那很好。

+0

我可以这样做:SELECT * FROM'schedule_items' WHERE'start' ='$ ymd'event虽然肯定... $ ymd将是YYYY-MM-DD并且..'start'将会是YYYY-MM-DD 00:00:00 – ian 2009-09-08 19:54:55

+0

不,您不能:正如您所说,=号的一侧将有00:00:00;你会比赛的第二个基础,而不是一天 - 即,你不会匹配太多。 – 2009-09-08 19:56:24

0

如果需要从时间字段提取日期的记录,您需要使用以下格式:

SELECT * FROM schedule_items WHERE date(start) = 'some-date time'

+0

嗨LittlePanda,只需要问你编辑了什么?它看起来和我写的一样... – 2015-04-16 10:50:12