2016-04-11 21 views
1

私は誰かが私がSQLデータベースで新しいです私を助けることを願っています。 私は以下の表を持っている:日付を2つの日付の間で選択してください

-------------------------------------- 
id  from   to  version 
--------------------------------------- 
0  01.01.70 31.12.79  v1  
1  01.01.80 31.12.89  v2  

今、私は、次の動作に到達したいと思います:ユーザーは、いくつかの日付を選択すると、選択したユーザ日が対応するとの間にあるところ

は、その後のバージョンは、返されるべきfromtoの日付。

例:

user_date = 01.01.70 ------> v1 should be returned 
user_date = 01.01.75 ------> v1 should be returned 
user_date = 31.12.79 ------> v1 should be returned 
user_date = 01.01.80 ------> v2 should be returned 
user_date = 01.01.85 ------> v2 should be returned 
user_date = 31.12.89 ------> v2 should be returned 

私は、列名に悪いアイデアかもしれないこの

select version from versions_table where user_date between from and to; 
+0

あなたの試行結果は何ですか? –

+0

は、日付と日付のデータ型ですか? – cableload

答えて

1

の列であると仮定しています。代用する。

select version 
from versions_table 
where to_date('<myInputDate>', 'dd.mm.yy') between to_date('from', 'mm.dd.yy') and to_date('to', 'mm.dd.yy'); 

あなたが(「<>」ノーキャレット)のために関心のある日付を代用することを確認します。

[編集]日付を指定しないと、アルファベットの順序が実行され、クエリに問題が発生します。

3

fromを試してみました。 あなたはこのSQLクエリをテストすることもできます。これにより

SELECT version 
FROM versions_table 
WHERE user_date between versions_table.from 
     AND versions_table.to; 

をあなたは、テーブルversions_tableからの列ではなく、キーワードFROM

+0

か、角括弧 '[from]'と '[to]'を入れてください –

+0

これは別の方法です。 –

+2

@ArnelAvesはOracleにはありません。代わりに二重引用符を使用しますが、OPはその後、正しい大文字と二重引用符でそのフィールドを参照する必要があります。 from_dateやto_dateのように列名を変更するほうがずっと簡単です。 – Boneist

1

てみてくださいを意味することを示しています。あなたのプログラミング言語に応じて、これは容易に達成さ - 私は「user_dateは、」あなたは、クエリに変数を渡す必要がありますVERSIONS_TABLE

select version from versions_table v where user_date=(select user_date from versions_table a where user_date between v.from and v.to); 
関連する問題