如果datediff等于1小时,则更新表

时间:2014-02-14 01:54:54

标签: sql sql-server

好吧 - 我以前从来没有使用过dateiff,而且当谈到sql时我有点像morron,但我正试图让这段代码运行起来而且没有运气。

$date = date('Y-m-d H:i:s',strtotime('now'));
$sql = "UPDATE starinformation SET starOwner = nextOwner WHERE DATEDIFF(minute, SiegeStart, :date) = 60";
$que = $db->prepare($sql);
$que->bindParam('date', $date);

try{ 
      $que->execute(); 
} catch(PDOException $e) { 
   $e->getMessage(); 
}

我希望它更新两个日期之间差异至少为1小时的表格。

4 个答案:

答案 0 :(得分:0)

尝试更改此内容:

$que->bindParam('date', $date);

到此:

$que->bindValue(':date', $date);

答案 1 :(得分:0)

根据您的问题标题,您需要将查询更改为

$sql = "UPDATE starinformation SET starOwner = nextOwner WHERE DATEDIFF(hour, SiegeStart, :date) = 1";

其次,请确保SiegeStart晚于:date,否则结果将为负,因为DATEDIFF参数是Interval,StartDate和EndDate。

答案 2 :(得分:0)

首先,您说“我希望它更新两个日期差异至少1小时的表格”(强调添加)。

为此,您需要将分钟数与>= 60进行比较。我强烈建议不要使用DATEDIFF(hour, ..) >= 1。原因是DATEDIFF()使用了边界。

e.g。

SELECT DATEDIFF(hour, '2014-02-14 08:59:59', '2014-02-14 09:00:00')
SELECT DATEDIFF(minute, '2014-02-14 08:59:59', '2014-02-14 09:00:00')
SELECT DATEDIFF(second, '2014-02-14 08:59:59', '2014-02-14 09:00:00')

当你跨越1小时的边界,1分钟的边界,1秒的边界时,结果是1对于所有3。这对许多人来说都是一个惊喜。

如果您的代码仍未执行所需操作,请运行SQL事件探查器以捕获正在运行的SQL,并手动运行该SQL以查看结果。这通常会显示生成的SQL语句难以调试的任何问题。

答案 3 :(得分:0)

尝试更改您的查询,如下所示:

$sql = "UPDATE starinformation SET starOwner = nextOwner WHERE DATEDIFF(minute, SiegeStart, :date) >= 60";