这个 WHERE 子句中的 % 有什么作用?

Raf*_*ima 13 sql-server t-sql

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

SELECT SUM(Col2) FROM clust_table WHERE Col1 % 3 = 1
Run Code Online (Sandbox Code Playgroud)

我想知道这个片段在 WHERE 子句中的用途: Col1 % 3 = 1

我在互联网上做了一些研究,没有找到关于这个命令的参考。

小智 32

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

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


Eri*_*ing 25

它是模运算符

返回一个数除以另一个数的余数。


小智 6

SQL 中的 % 可以以两种不同的格式使用。如果它在字符串中使用,LIKE那么它是一个通配符,例如:

WHERE col_name like '%test%'
Run Code Online (Sandbox Code Playgroud)

这意味着找到所有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++ ;
}
Run Code Online (Sandbox Code Playgroud)

这基本上会输出 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)
Run Code Online (Sandbox Code Playgroud)

  • 2 % 3 = 2,而不是 6.. 当您除以的数字大于您要除的数字时,取模返回余数。除以十进制的尾随小数与 mod 的输出无关。 (2认同)