2011年1月13日木曜日

SQL Anywhere 時間差を求める

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

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

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


たとえば、以下のようなスキーマのテーブルがあり、upd_timeに各行の更新時刻が入っているような場合、
  1. CREATE TABLE mytable (  
  2.     r_id integer NOT NULL  
  3.    ,r_data varchar(100) NOT NULL  
  4.    ,upd_time timestamp NOT NULL  
  5. );  


このテーブルから、1時間以内に更新された行を抽出するSQLは次のように書ける。
条件句にDATEDIFF関数を使って現在時刻NOW()関数とupd_time列の差を秒単位で求め、3600秒以内である行のみを抽出する。
  1. SELECT r_id,r_data,upd_time  
  2. FROM mytable   
  3. WHERE DATEDIFF(second,upd_time,NOW()) <= 3600  
  4. ORDER BY start_time  


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

0 件のコメント:

コメントを投稿