2011年1月13日木曜日

SQL Anywhere 時間差を求める

SQL Anywhereで2つの時刻の差が何秒あるかを求めるにはdatediff関数を使う。

この関数の書式は以下のようになっており、date-partには求めたい差の単位day,hour,secondなど、date-expression-1,2には差を求めたい2つの時刻を入れる。date-expression-1のほうに古いほうの時刻があると関数の結果は正となり、新しいと負になる。


DATEDIFF( date-part, date-expression-1, date-expression-2 )


たとえば、以下のようなスキーマのテーブルがあり、upd_timeに各行の更新時刻が入っているような場合、

CREATE TABLE mytable (
r_id integer NOT NULL
,r_data varchar(100) NOT NULL
,upd_time timestamp NOT NULL
);


このテーブルから、1時間以内に更新された行を抽出するSQLは次のように書ける。
条件句にDATEDIFF関数を使って現在時刻NOW()関数とupd_time列の差を秒単位で求め、3600秒以内である行のみを抽出する。

SELECT r_id,r_data,upd_time
FROM mytable
WHERE DATEDIFF(second,upd_time,NOW()) <= 3600
ORDER BY start_time


この関数はSQL2003標準であるため、サポートしている別のDB、たとえばSQL Server 2008などでも同じように使えるようだ。

0 件のコメント:

コメントを投稿