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

Sql 如果datediff等于1小时,则更新表,sql,sql-server,Sql,Sql Server,好吧,我以前从未使用过datediff,谈到sql,我有点像莫伦,但我正试图让这段代码正常工作,但我运气不好 $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->bind

好吧,我以前从未使用过datediff,谈到sql,我有点像莫伦,但我正试图让这段代码正常工作,但我运气不好

$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小时的表格。

尝试更改此选项:

$que->bindParam('date', $date);
为此:

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

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

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

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

首先,您声明我希望它更新表,其中两个日期之间的差值至少增加1小时

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

e、 g

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


如果您的代码仍然没有执行您想要的操作,请运行SQL探查器以捕获它正在运行的SQL,然后手动运行该SQL以查看结果。这通常会显示生成的SQL语句存在难以调试的任何问题。

请尝试按以下方式更改查询:

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

我认为你是在使用sql server?@KevinBowersox是的,先生。最好用sql server标记你的问题,以吸引对标记感兴趣的人,这样每个人都知道你的db风格。根据你展示的内容,你只是想了解你想做什么:你想更新starinformation中datediff为1分钟的所有记录吗?或者,如果datediff为一分钟,您是否只想更新一条记录?另外,现在你已经将它设置为datediff为60分钟的位置。不,我想在datediff为一小时的位置更新它@汤姆森:由于某种原因,这仍然不起作用。我开始认为这是我代码中的其他地方。您是否尝试从SQL Server Management Studio/其他地方直接运行此查询?它起作用了吗?
$sql = "UPDATE starinformation SET starOwner = nextOwner WHERE DATEDIFF(minute, SiegeStart, :date) >= 60";