2009-07-16 11 views
7

Ich muss überprüfen, dass das Ergebnis des Ausdrucks in Where-Klausel im Bereich von Ganzzahlen ist.Gibt es Integer-Bereiche für WHERE-Klausel?

etwas like this: Wählen Sie * aus der Tabelle where (col1/col2) in (1..8). (1..8) - bedeutet Bereich von ganzen Zahlen.

Ich meine, dass es integer, nicht float sein muss. Also kann ich "zwischen 1 und 8" nicht verwenden, weil 1.2 korrekt ist.

Gibt es einen Gedanken?

Antwort

9

Sie können dies natürlich tun:

select * from table where (col1/col2) in (1,2,3,4,5,6,7,8); 

oder

select * from table where (col1/col2) between 1 and 8 
and mod (col1 , col2) = 0; 
+0

Soweit ich sehe 2. Variante ist die beste Option. Natürlich ist (1, .., n) am intuitivsten, aber im Falle einer großen Reichweite weniger praktisch. – zmische

0

Sie könnten es von Float zu Int umwandeln und between verwenden. (Sie können eine virutal/berechnete Spalte in Abhängigkeit von der Abfrage der Leistung machen wollen.)

+0

Wenn Sie es von Float zu Ganzzahl umwandeln, wird es immer einen ganzzahligen Test bestehen ... –

+0

Ah, guter Punkt! Ich brauche meinen Kaffee. =) – Nelson

0

col1/col2 Um zu testen, eine ganze Zahl ist, können Sie sie zusammen Mod könnte ...

Wo (col1/col2) = (spalte1 \ col2) und (spalte1/col2) zwischen 1 und 8

+0

Oder einfach so, testen Sie die Modulo col1% col2 = 0 – Bill

+0

\ scheint kein Oracle-Operator zu sein –

+0

@patrick Sie haben Recht. Oracle möchte, dass du Floor (x, y) und Mod (x, y) verwendest. Meine ist die nutzlose M $ SQL-Antwort. – Bill

1

Wie über

select * 
from table 
where (col1/col2) BETWEEN 1 AND 8 
    and (col1/col2) = FLOOR(col1/col2) 

Dieser prüft einfach, wenn der Anteil in dem Intervall, und ganze Zahl ist.

+0

Dies funktioniert nicht auf Orakel ... – FerranB

+0

Welcher Teil davon? –

+0

Die 1..8 ist keine gültige SQL-Syntax für einen Bereich. –

0

Sie können Pipeline-Funktion verwenden Integerbereich zu erzeugen.