获取特定日期之前的所有行

时间:2016-03-22 12:56:40

标签: mysql sql

我们正在使用以下更新的SQL从我们的数据库中获取客户列表,我们会在3天之前发送短信。

SELECT * FROM sms WHERE sent_time >= NOW() - INTERVAL 3 DAY;

sms每天都会更新sent_time列,默认值为0或上次发送时间。

有些行的值为sent_time = 0,但上述脚本没有提取任何行。

什么是正确的SQL?

早些时候我们使用的SQL与PHP如下所述:

$vTime = time() - ( 60*60*24*3 );
$sql = "SELECT * FROM sms WHERE $vTime <= sent_time";

4 个答案:

答案 0 :(得分:1)

函数NOW()将返回当前日期和时间,但正如我所见,您之前使用过PHP time(),它返回一个Unix-Timestamp。 SQL等价物是UNIX_TIMESTAMP()

语法UNIX_TIMESTAMP()

SELECT * FROM sms WHERE sent_time >= UNIX_TIMESTAMP() - (60*60*24*3);

语法UNIX_TIMESTAMP(date)

SELECT * FROM sms WHERE sent_time >= UNIX_TIMESTAMP(NOW() - INTERVAL 3 DAY) OR sent_time = 0

答案 1 :(得分:1)

NOW() - INTERVAL 3 DAY;返回DATETIME,echo time() - ( 60*60*24*3 );返回时间戳。

如果您的数据库列是时间戳,那么您的MySQL测试将永远不会起作用,请改用:

SELECT * FROM sms WHERE sent_time >= UNIX_TIMESTAMP(NOW() - INTERVAL 3 DAY)

答案 2 :(得分:0)

只需更改选择查询..

SELECT * FROM sms WHERE sent_time >= DATE_SUB(NOW(), INTERVAL 3 DAY) AND NOW();

答案 3 :(得分:0)

尝试以下:

Schema::create('articles', function (Blueprint $table) {
    $table->increments('id');
    $table->string('title');
}

Schema::table('articles', function (Blueprint $table) {
    $table->string('description');
}