Cosa fa% in questa clausola WHERE?


13

Sto facendo allenamento e uno degli script ha il seguente comando:

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

Vorrei sapere a cosa serve questo frammento nella clausola WHERE: Col1 % 3 = 1

Ho fatto delle ricerche su Internet e non ho trovato riferimenti a questo comando.

Risposte:


32

Viene utilizzato come operatore Modulo; restituendo il resto di un numero diviso per un altro.

Nel tuo esempio, la clausola WHERE limita i risultati solo a quelli in cui il valore Col1 diviso per 3 lascia un resto di 1. (ad esempio 4,7,10, ecc.)



6

% in SQL può essere utilizzato in due diversi formati. Se viene utilizzato in una stringa con, LIKEallora è un carattere jolly, ad esempio:

WHERE col_name like '%test%'

Ciò significherebbe trovare tutto ciò col_nameche contiene la parola "test".

Ma in questa specifica operazione il simbolo% viene utilizzato come operatore modulo. Modulo (su una calcolatrice normalmente mostrata come MODpulsante) restituisce il resto. Può essere abbastanza utile se si utilizza un ciclo for per visualizzare i dati e si desidera contare le colonne: di recente ho usato l'operatore modulo durante la stesura di una pagina web. Il mio era in PHP, ma questo è un esempio:

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

Ciò produrrebbe sostanzialmente 1 - 100 e ogni tre articoli produrrebbe "Tre articoli", e ogni dieci articoli produrrebbe "Dieci articoli" perché qualsiasi altro numero restituirebbe un valore, ad esempio:

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, non 6 .. modulo restituisce il resto quando il numero che stai dividendo è maggiore del numero che stai dividendo. Il decimale finale della divisione per decimale non influisce sull'output di mod.
Nick Dewitt,

e select 5 / 10 ;fornirà 0in SQL, non0.5
ypercubeᵀᴹ

2

Le altre risposte sono corrette. È l'operatore modulo, che restituisce il resto della divisione.

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

Ma penso che potrebbe essere utile aggiungere PERCHÉ è un'operazione rilevante e PERCHÉ potrebbe essere utile a volte.

Il X % 2è il più usato uno perché restituisce se il numero è pari o dispari.

Immagina di voler selezionare tutte le colonne con numeri pari, puoi fare:

SELECT * FROM table WHERE column % 2 = 0

Se vuoi selezionare tutte le colonne con numeri dispari, puoi fare:

SELECT * FROM table WHERE column % 2 = 1

Possono verificarsi altri casi d'uso, ad esempio, si desidera filtrare tutte le colonne in base alla loro unità, è possibile utilizzare questo per ottenere tutti i numeri che hanno zero nelle loro unità:

SELECT * FROM table WHERE column % 10 = 0
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.