【问题标题】:SELECT rows that are a multiple of x选择 x 的倍数的行
【发布时间】:2013-07-14 02:20:46
【问题描述】:

在 SQL Server 中,如何选择行 10、20、30、40 等,其中 RowID 是某个整数 (+10) 的相等间隙。有 50k 行,所以使用 IN (1,10,20,etc) 很费力。

SELECT * FROM 'TABLENAME' WHERE RowID = 10 (+ 10)

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    你可以使用模数。

    SELECT * FROM `table` WHERE (`id` % 10) = 0
    
    SELECT * FROM `table` WHERE (`id` MOD 10) = 0
    
    SELECT * FROM `table` WHERE !MOD(`id`, 10)
    

    任何人都应该这样做。

    【讨论】:

    • 谢谢,我知道 Mod 代表模数,它代表整数除法的余数。但是,如果执行 12 MOD 10,则结果为 2,如果执行 3 MOD 5,则结果为 0,并且 SQL 无法识别 !MOD。 % 是正确的符号,但不是我需要的正确运算符。感谢您的尝试。
    • 你错了。 3 MOD 5 是 3。它消除了除法的其余部分,因此当它是完美除法时,它将为零。 n MOD 10 将为 0 表示 10、20、30、40、50 等。您可以使用此信息来准确识别您想要的行。
    • 这是我的盲点:tizag.com/sqlTutorial/sqloperators.php Modulus 执行除法,将第一个数字除以第二个数字,但不是返回商,而是返回“余数”值。在 MSSQL 中工作的 WHERE 子句(对我来说) WHERE (PortalID % 10 = 0) 这会导致每 10 个 id 被选中 WHERE (PortalID % 50 = 0) 这会导致每 50 个 id 被选中
    【解决方案2】:

    我怀疑您需要使用模运算符 rowId mod 10 = 0。 类似的东西。

    【讨论】:

    • 这导致的结果比我的猜测更接近,但如果我想要每 100 行,我使用 ModuleID % .01 = 0。除数 % 除数对我来说没有意义需要 - 例如从第 500 行开始的每 10 行
    • 添加 where 行 > 499
    • 一般应该是 id mod 100,而不是 .01
    猜你喜欢
    • 2018-09-19
    • 2020-03-02
    • 1970-01-01
    • 1970-01-01
    • 2016-03-24
    • 2023-03-08
    • 2013-11-18
    • 1970-01-01
    • 2012-02-11
    相关资源
    最近更新 更多