此WHERE子句中的%有何作用?


13

我正在训练中,其中一个脚本具有以下命令:

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

我想知道此代码段在WHERE子句中的作用: Col1 % 3 = 1

我在互联网上进行了一些研究,但没有找到有关此命令的参考。

Answers:


32

它被用作模运算符;返回数字除以另一个的余数。

在您的示例中,WHERE子句将结果限制为仅将Col1值除以3剩下余数1的结果(例如4,7,10等)。



6

SQL中的%可以两种不同的格式使用。如果与一起用于字符串LIKE,则为通配符,例如:

WHERE col_name like '%test%'

那将意味着找到col_name其中包含“测试”一词的所有内容。

但是在此特定操作中,%符号被用作模运算符。模数(在通常显示为MOD按钮的计算器上)返回余数。如果使用for循环显示数据并且要对列进行计数,则它可能是非常有用的工具-我最近在绘制网页时使用了模运算符。我的是PHP,但这是一个例子:

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

这基本上将输出1-100,每三个项目将输出“三个项目”,每十个项目将输出“十个项目”,因为任何其他数字将返回一个值,例如:

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,而不是6。当您要除以的数大于您要除的数时,取模余数。除以十进制的尾随十进制与mod的输出无关。
尼克·德威特

select 5 / 10 ;会提供0SQL,而不是0.5
ypercube18

2

其他答案是正确的。是模运算符,它返回除法的余数。

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

但是我认为添加为什么这是一个相关操作可能会有所帮助,为什么有时它会很有用。

X % 2是因为它返回如果数字是偶数或奇数中最常用的一个。

假设您要选择所有带有偶数的列,则可以执行以下操作:

SELECT * FROM table WHERE column % 2 = 0

如果要选择所有带有奇数的列,则可以执行以下操作:

SELECT * FROM table WHERE column % 2 = 1

可能会出现其他用例,例如,您要按其单位过滤所有列,可以使用它来获取所有单位为零的数字:

SELECT * FROM table WHERE column % 10 = 0
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.