查询以查找部分匹配

时间:2009-09-08 18:44:48

标签: php mysql

我想编写一个查询,以查找'schedule_items'表格中与YYYY-MM-DD字段的DATETIME值匹配的所有项目。

类似于:SELECT * FROM schedule_items WHERE启动?matches? '$date'

如果开始是DATETIME字段,其中2009-09-23 11:34:00$date等数据就像2009-09-23

我可以这样做,还是需要加载所有值,然后展开并比较我的DATETIME start字段中的值?

4 个答案:

答案 0 :(得分:7)

您可以在MySQL中使用LIKE

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

您将%符号作为通配符。

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

答案 1 :(得分:2)

如果你正在使用日期,就好像你说的那样:

  

其中start是DATETIME字段   与2009-09-23 11:34:00和   $ date会是这样的   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)

这可能比“喜欢”更好,如果你开始列有一个索引 - 但不确定;但是,你仍然会从你的查询中明白你所愿意得到的......这很好。

答案 2 :(得分:1)

在SQL中

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

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

(这与2009年8月的任何内容相符)

答案 3 :(得分:0)

如果需要从datetime字段中提取日期记录,则需要使用以下格式:

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