0

私はPostgresデータベースを使ってアプリケーションを構築しています。私はそれをノードに接続するためにknexを使用しています。しかし、解決策が未処理のクエリによって最もよく処理されるならば、私はそのルートに行くこともできます。PostGres/Knex 2つのタイムスタンプに指定された時間間隔が含まれているすべてのエントリを取得する方法

私はと"to_time"を含む"Schedules"というテーブルを持っています。

私はデシベル"start_time""end_time"を与えると見つけることができるようにしたい:

  1. "start_time"と「END_TIME」(すなわち、from_time <= start_time && end_time >= to_time)を含むことができ、すべてのスケジュール
  2. "start_time"に重なっすべてのスケジュールをそして、私は考えられ"end_time"(すなわち、 (start_time <= from_time && end_time > from_time) || (start_time < to_time && end_time >= from_time))

一つの可能​​な解決策は、単にstorinですgはUnixエポックの整数としての値です...これは私のバックアップ計画です。しかし、これらは実際には時間値なので、おそらくタイムスタンプ値形式で保存することが最善です。

+0

います 'from_time'のためのものであり、' *回* *タイムスタンプを表すか、to_time'あなたの最初の条件のためにあるのですか?彼らが時間を表すのであれば、00:00時間を越えるのが理にかなっていますか? (つまり、スケジュールは22:00に開始し、翌日には02:00に終了します)。 – joanolo

+0

結果を取得したとき: 'overlaps'と' contains in'を区別する必要がありますか(これは 'overlaps'の特殊なケースです)? – joanolo

+0

http://dbfiddle.uk/?rdbms=postgres_9.6&fiddle=fbf5fe4c8b5611d92f87a7766f53cc4bを見て、これはあなたが探しているものですか? – joanolo

答えて

0

この1つは*

knex.select('*').from('Schedules').where('from_time', '<=', start_time).where('to_time', '<=', end_time) 

この1つはあなたの第二

knex.select('*').from('Schedules').where(function() { 
    this.where('from_time', '>=', start_time).where('from_time' ,'<', end_time)) 
}).orWhere(function() { 
    this.where('to_time', '>', start_time).where('from_time' ,'<=', end_time)) 
})