2016-04-11 19 views
1

Ich hoffe, jemand kann mir helfen, ich bin neu in der SQL-Datenbank. Ich habe die folgende Tabelle:Wählen Sie ein Datum zwischen zwei Daten

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

Nun möchte ich das folgende Verhalten gerne erreichen:

, wenn der Benutzer einige Datum ausgewählt, dann die Version zurückgegeben werden sollte, wo der ausgewählte Benutzer Datum zwischen dem entspricht, from und to Daten.

Beispiele:

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 

Ich habe versucht, diese

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

Was war das Ergebnis Ihres Versuchs? –

+0

ist der Datentyp der von und zu einem Datum? – cableload

Antwort

1

Sie eine Variable in der Abfrage übergeben müssen - je nach Programmiersprache ist dies leicht zu bewerkstelligen. Ersatz.

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'); 

Stellen Sie sicher, das Datum, das Sie in für (keine Carets "<>") interessiert sind, zu ersetzen.

[Bearbeiten] Wenn Sie sie nicht aktualisieren, wird eine alphabetische Sortierung durchgeführt, die Probleme mit der Abfrage verursacht.

3

from eine schlechte Idee für einen Spaltennamen sein könnte. Sie könnten diese SQL Query testen:

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

Damit zeigen Sie, dass Sie Spalten aus der Tabelle bedeuten versions_table und nicht das Schlüsselwort FROM

+0

oder einfach Klammern '[from]' und '[to]' –

+0

setzen Okay, das wäre ein anderer Weg, Danke! –

+2

@ArnelAves nicht in Oracle. Sie würden stattdessen doppelte Anführungszeichen verwenden, obwohl das OP dann auf dieses Feld mit der korrekten Großschreibung und den doppelten Anführungszeichen von da an verweisen müsste. Viel einfacher, den Spaltennamen in etwas wie from_date und to_date zu ändern. – Boneist

1

Versuch. Ich gehe davon aus „user_date“ ist eine Spalte in 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); 
Verwandte Themen