Was macht% in dieser WHERE-Klausel?


13

Ich mache Training und eines der Skripte hat den folgenden Befehl:

SELECT SUM(Col2) FROM clust_table WHERE Col1 % 3 = 1

Ich würde gerne wissen, wofür dieses Snippet in der WHERE-Klausel gedacht ist: Col1 % 3 = 1

Ich habe im Internet recherchiert und keine Referenzen zu diesem Befehl gefunden.

Antworten:


33

Es wird als Modulo-Operator verwendet. Rückgabe des Restes einer durch eine andere geteilten Zahl.

In Ihrem Beispiel beschränkt die WHERE-Klausel die Ergebnisse nur auf diejenigen, bei denen der durch 3 geteilte Col1-Wert einen Rest von 1 hinterlässt (z. B. 4,7,10 usw.).



6

% in SQL kann in zwei verschiedenen Formaten verwendet werden. Wenn es in einer Zeichenfolge mit verwendet wird, LIKEist es ein Platzhalter, zum Beispiel:

WHERE col_name like '%test%'

Das würde bedeuten, alles zu finden, in col_namedem das Wort "test" vorkommt.

In dieser speziellen Operation wird das% -Symbol jedoch als Modulo-Operator verwendet. Modulo (auf einem Taschenrechner, der normalerweise als MODSchaltfläche angezeigt wird ) gibt den Rest zurück. Es kann sehr nützlich sein, wenn Sie eine for-Schleife zum Anzeigen von Daten verwenden und Spalten zählen möchten. Ich habe kürzlich beim Erstellen einer Webseite den Modulo-Operator verwendet. Meins war in PHP, aber dies ist ein Beispiel:

$count = 0 ;
$records = array () ;
for ( $a = 0 ; $a < 100 ; $a++ )
    $records[$a] = $a ;
foreach ( $records as $record )
{
    if ( $count % 3 == 0 )
        echo '<p>Three items</p>' ;
    if ( $count % 10 == 0 )
        echo '<p>Ten items</p>' ;
    echo '<p>'.$record.'</p>' ;
    $count++ ;
}

Dies würde grundsätzlich 1 - 100 und alle drei Elemente "Drei Elemente" und alle zehn Elemente "Zehn Elemente" ausgeben, da alle anderen Zahlen einen Wert zurückgeben würden, zB:

5 / 10 = 0.5 (5 % 10 = 5)
2 / 3 = 0.666... (2 % 3 = 2)
50 / 10 = 5.0 (50 % 10 = 0)
9 / 3 = 3.0 (9 % 3 = 0)

2
2% 3 = 2, nicht 6 .. modulo gibt den Rest zurück, wenn die Zahl, durch die Sie teilen, größer ist als die Zahl, die Sie teilen. Die nachfolgende Dezimalstelle der Division durch die Dezimalstelle hat keinen Einfluss auf die Ausgabe von mod.
Nick Dewitt

und select 5 / 10 ;wird 0in SQL geben, nicht0.5
ypercubeᵀᴹ

2

Die anderen Antworten sind richtig. Es ist der Modulo-Operator, der den Rest der Division zurückgibt.

  • 0% 3 = 0
  • 1% 3 = 1
  • 2% 3 = 2
  • 3% 3 = 0
  • 4% 3 = 1
  • 5% 3 = 2
  • ...

Aber ich denke, es könnte hilfreich sein, WARUM es eine relevante Operation ist und WARUM es manchmal nützlich sein könnte.

Das X % 2ist das am häufigsten verwendete, da es zurückgibt, wenn die Zahl gerade oder ungerade ist.

Stellen Sie sich vor, Sie möchten alle Spalten mit geraden Zahlen auswählen. Sie haben folgende Möglichkeiten:

SELECT * FROM table WHERE column % 2 = 0

Wenn Sie alle Spalten mit ungeraden Zahlen auswählen möchten, haben Sie folgende Möglichkeiten:

SELECT * FROM table WHERE column % 2 = 1

Es können auch andere Anwendungsfälle auftreten. Wenn Sie beispielsweise alle Spalten nach ihrer Einheit filtern möchten, können Sie dies verwenden, um alle Zahlen zu ermitteln, deren Einheiten Null enthalten:

SELECT * FROM table WHERE column % 10 = 0
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.