O que% nesta cláusula WHERE faz?

13

Estou treinando e um dos scripts tem o seguinte comando:

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

Gostaria de saber para que serve esse snippet na cláusula WHERE: Col1 % 3 = 1

Eu fiz algumas pesquisas na internet e não encontrei referências sobre esse comando.

Rafaells
fonte

Respostas:

32

Está sendo usado como um operador de módulo; retornando o restante de um número dividido por outro.

No seu exemplo, a cláusula WHERE está limitando os resultados apenas àqueles em que o valor de Col1 dividido por 3 deixa um restante de 1. (por exemplo, 4,7,10 etc.)

A. Folken
fonte
25

É o operador Modulo .

Retorna o restante de um número dividido por outro.

Erik Darling
fonte
6

% em SQL pode ser usado em dois formatos diferentes. Se for usado em uma string LIKE, é um curinga, por exemplo:

WHERE col_name like '%test%'

Isso significaria encontrar tudo em col_nameque contenha a palavra "teste".

Mas nesta operação específica, o símbolo% está sendo usado como um operador de módulo. Módulo (em uma calculadora normalmente mostrada como MODbotão) retorna o restante. Pode ser uma ferramenta bastante útil se você usar um loop for para exibir dados e quiser contar colunas - recentemente usei o operador modulo ao criar uma página da web. O meu estava em PHP, mas este é um exemplo:

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

Basicamente, isso produziria de 1 a 100 e a cada três itens, "Três itens" e a cada dez itens, "Dez itens", porque quaisquer outros números retornariam um valor, por exemplo:

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)
TheKLF99
fonte
2
2% 3 = 2, não 6 .. módulo retorna o restante quando o número que você está dividindo é maior que o número que você está dividindo. O decimal à direita da divisão por decimal não tem influência na saída do mod.
Nick Dewitt
e select 5 / 10 ;cederá 0em SQL, não0.5
ypercubeᵀᴹ 31/03
2

As outras respostas estão corretas. É o operador do módulo, que retorna o restante da divisão.

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

Mas acho que pode ser útil adicionar POR QUE é uma operação relevante e POR QUE às vezes pode ser útil.

O X % 2é o mais usado porque retorna se o número for par ou ímpar.

Imagine que você deseja selecionar todas as colunas com números pares, você pode:

SELECT * FROM table WHERE column % 2 = 0

Se você deseja selecionar todas as colunas com números ímpares, pode:

SELECT * FROM table WHERE column % 2 = 1

Outros casos de uso podem surgir, por exemplo, você deseja filtrar todas as colunas por sua unidade, pode usar isso para obter todos os números que têm zero em suas unidades:

SELECT * FROM table WHERE column % 10 = 0
Edu
fonte