mysql:3989
From: Tybalt of Capulet <Tybalt of Capulet <ice-man@xxxxxxxxxx>>
Date: Fri, 13 Jul 2001 01:01:33 +0900
Subject: [mysql 03989] INTERVAL がうまく動きません
神崎です。
INTERVALを使い該当データを削除しようとしているのですがうまくいきません。
[テーブル:A]
id varchar(10)
inputday timestamp
[サンプルデータ]
1 20010713012030
2 20010713014030
3 20010713015030
下記の様なスクリプトをcronで動かしています。
ところがこれをAM2:45に動かすとデータが全て削除されてしまいます。
サンプルデータからするとINTERVALが1なのでidが1と2のデータが消えて
3は残って欲しいわけです。
--------------ここから------------------------------
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
$mon = $mon + 1;
$year += 1900;
$mon = substr('0'.$mon,-2,2);
$hour = substr('0'.$hour,-2,2);
$nowday = $year.$mon.$mday.$hour.$min.$sec;
# 1時間以上経過しているAテーブルのデータの削除
$sth = $dbh->prepare( qq{
DELETE FROM A WHERE (inputday + INTERVAL 1 HOUR) < ?
}) || die "Can't prepare statement:" . $dbh->errstr . "\n";
$rc = $sth->execute($nowday)
|| die "Can't execute statement:";
$sth->finish;
$dbh->disconnect();
exit;
--------------ここまで------------------------------
ちなみに下記の様に?の部分に直接変数を入れると今度は
該当データが削除できません。
--------------ここから------------------------------
$sth = $dbh->prepare( qq{
DELETE FROM A WHERE (inputday + INTERVAL 1 HOUR) < $nowday
}) || die "Can't prepare statement:" . $dbh->errstr . "\n";
$rc = $sth->execute
|| die "Can't execute statement:";
--------------ここまで------------------------------
INTERVALとtimestamp型の使い方が間違っているのでしょうか?
どなたかおわかりのかた教えていただけませんでしょうか?
[環境]
mysql-3.23.39
perl v5.6.0
Red Hat Linux7.0
________________________________R_y_u_____
神崎 隆
Mail:ice-man@xxxxxxxxxx
_____K_a_n_z_a_k_i________________________
-> 3989 2001-07-13 01:01 [Tybalt of Capulet <i] INTERVAL がうまく動きません 4003 2001-07-13 21:15 ┗[YONEMOTO Kazumasa <y] 4005 2001-07-14 00:40 ┗[Tybalt of Capulet <i]