根据datetime列查询记录
我在 MySql 表中有一个 datetime 类型的列。存储的值是这样的:
2008-02-15 17:21:56
2008-02-15 17:22:02
2008-02-15 17:22:03
现在我想根据此列查询一些记录,但我只有日期部分而不是时间部分。 所以我在 zend 中这样查询。
$select->where('tableName.columnName = ?', '2008-02-15' );
但它与任何记录都不匹配。没有时间部分如何查询。
谢谢
I have a column of type datetime in MySql table. Stored values are like this:
2008-02-15 17:21:56
2008-02-15 17:22:02
2008-02-15 17:22:03
Now I want to query some records based on this column but I have only date part not time part.
So I am querying like this in zend.
$select->where('tableName.columnName = ?', '2008-02-15' );
But it does not match any record. How can I query without time part.
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
试试这个
WHERE DATE(tableName.columnName) = '2008-02-15'
try this
WHERE DATE(tableName.columnName) = '2008-02-15'
@Shota 提供的答案是可行的,但是它会阻止 MySQL 在日期时间列上使用任何索引,因为必须在表的每一行上调用 DATE 函数来查看它是否匹配。
如果将时间范围硬编码到查询中,它将给出相同的结果,并且仍然允许使用索引。
例如。 $select->where('tableName.columnName >= ? AND tableName.columnName <= ?', '2008-02-15 00:00:00', '2008-02-15 23:59 :59' );
请注意,我的 php 语法可能有错误,但你应该明白。
The answer @Shota has provided will work, however it will prevent MySQL from using any indexes on the datetime column due to the DATE function having to be called on every row of the table to see if it matches.
If you hard code the time range into the query it will give the same result and still allow indexes to be used.
eg.
$select->where('tableName.columnName >= ? AND tableName.columnName <= ?', '2008-02-15 00:00:00', '2008-02-15 23:59:59' );
Please note i may have the php syntax wrong but you should get the idea.