Co robi% w tej klauzuli WHERE?


13

Trenuję, a jeden ze skryptów ma następującą komendę:

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

Chciałbym wiedzieć, do czego służy ten fragment w klauzuli WHERE: Col1 % 3 = 1

Przeprowadziłem badania w Internecie i nie znalazłem żadnych odniesień do tego polecenia.

Odpowiedzi:


32

Jest używany jako operator Modulo; zwracając pozostałą część liczby podzieloną przez inną.

W twoim przykładzie klauzula WHERE ogranicza wyniki tylko do tych, w których wartość Col1 podzielona przez 3 pozostawia resztę 1. (np. 4,7,10 itd.)



6

% w SQL może być używany w dwóch różnych formatach. Jeśli jest używany w ciągu znaków, LIKEto jest to symbol wieloznaczny, na przykład:

WHERE col_name like '%test%'

Oznaczałoby to znaleźć wszystko, col_nameco zawiera słowo „test”.

Ale w tej konkretnej operacji symbol% ​​jest używany jako operator modulo. Modulo (na kalkulatorze zwykle pokazanym jako MODprzycisk) zwraca resztę. Może to być bardzo przydatne narzędzie, jeśli używasz pętli for do wyświetlania danych, a chcesz liczyć kolumny - ostatnio przy tworzeniu strony internetowej użyłem operatora modulo. Mój był w PHP, ale to jest przykład:

$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++ ;
}

W rezultacie generowałoby to od 1 do 100, a co trzy pozycje generowałoby „Trzy elementy”, a co dziesięć elementów generowałoby „Dziesięć przedmiotów”, ponieważ wszelkie inne liczby zwracałyby wartość, np .:

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, a nie 6. Modulo zwraca resztę, gdy liczba, przez którą dzielisz, jest większa niż liczba, którą dzielisz. Końcowy przecinek dziesiętny dzielenia przez dziesiętne nie ma wpływu na wynik mod.
Nick Dewitt,

i select 5 / 10 ;da 0SQL, a nie0.5
ypercubeᵀᴹ

2

Pozostałe odpowiedzi są poprawne. Jest to operator modulo, który zwraca pozostałą część podziału.

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

Ale myślę, że warto dodać DLACZEGO jest to istotna operacja i DLACZEGO czasem może być przydatna.

X % 2Jest najczęściej używane jeden, ponieważ zwraca jeśli liczba jest parzysta lub nieparzysta.

Wyobraź sobie, że chcesz zaznaczyć wszystkie kolumny o liczbach parzystych, możesz:

SELECT * FROM table WHERE column % 2 = 0

Jeśli chcesz zaznaczyć wszystkie kolumny o liczbach nieparzystych, możesz:

SELECT * FROM table WHERE column % 2 = 1

Mogą wystąpić inne przypadki użycia, na przykład chcesz filtrować wszystkie kolumny według ich jednostek, możesz użyć tego, aby uzyskać wszystkie liczby, które mają zero w swoich jednostkach:

SELECT * FROM table WHERE column % 10 = 0
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.