从表中选择所有今天的记录。

3

需要PHP/MySql的帮助。需要选择所有“今天”的记录。

我的表中有一个列保存了Unix时间戳,我只想从表中选择Unix时间戳等于今天的记录。

愿意在Linux命令行上执行此操作,只需要基本的MySql查询语句即可。

8个回答

15

我会选择SQL版本:

SELECT * FROM table WHERE DATE(timestamp_field) = CURDATE();


3
如果timestamp_field存储的是自1970年以来的秒数,则使用DATE(FROM_UNIXTIME(timestamp_field))。 - nos
1
+1 我也会使用 CURDATE()CURRENT_DATE 而不是 DATE(NOW()) - wimvds
好了 - 我修复了它 - 现在它使用CURDATE() :-) - Michael Banzon
字段上的表达式排除了索引的可能使用。 - zerkms

3

以下是正确的做法:

WHERE `date` BETWEEN UNIX_TIMESTAMP(DATE(NOW())) AND UNIX_TIMESTAMP(DATE(DATE_ADD(NOW(), 1 DAY)))

如果未来(明天、后天等)没有值,则可以简化为:
WHERE `date` >= UNIX_TIMESTAMP(DATE(NOW()))

当你将date字段类型更改为datetime时,可能的查询将是:

WHERE `date` >= DATE(NOW())

当我说“正确”时,我是指这些查询可以通过使用索引进行优化。而像DATE(order_time) = DATE(NOW())这样的查询则不能,因为它是对字段的表达式。


3

既然您标记了PHP,我将提供PHP答案:

list ( $y, $m, $d ) = explode('.', date('Y.m.d')); 
$today_start = mktime(0, 0, 0, $m, $d, $y);
$today_end   = mktime(23, 59, 59, $m, $d, $y);
// do the query with this clause:
// ... WHERE unix_timestamp BETWEEN $today_start AND $today_end

你需要将日期字符串用 '" 包裹起来,例如 date('Y.m.d') - RobertPitt

2
SELECT * FROM table_name WHERE DATE(date) = DATE(NOW())

1
在我的表格中有一个日期时间列,我成功地使用了这个。
 SELECT * FROM orders WHERE DATE(order_time) = DATE(NOW())

1
一个合适的 WHERE 子句可能是:
CAST( FROM_UNIXTIME( <your_field> ) AS DATE ) = CURDATE( )
  • FROM_UNIXTIME( ) - 将时间戳转换为 MySQL DATETIME 格式
  • CAST( AS DATE ) - 获取日期部分
  • CURDATE( ) - 获取当前日期

1
SELECT * FROM tbl WHERE date >= CURDATE()

1
$q="select * from table where date > '".date("Y-m-d 00:00:00")."' and date < '".date("Y-m-d 23:59:59")."'";

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接