为什么使用 LIKE 与 = 时会有不同的结果?

Why is there a different outcome when using LIKE vs. =?

我正在使用 Report Builder 3.0。我有一份报告,其中一种排序基于使用行组的 line(它也在 line 上分组)。当我在查询代码 中使用 LIKE 时,报表 上的排序 工作正常:它按 A-Z 排序。当我在查询代码 中使用 = 时, 报告 排序如下:

LN BM4
LN BM2
LN BM1
LN BM6
LN BM5
LN WT2
LN WT4
LN WT3
LN WT5
LN BM3
LN WT5

为什么使用不同的运算符会导致排序不同?如何让我的 report 对 A-Z 进行排序并仍然使用 = 运算符?在旁注中,我们的一位 I.T 告诉我。伙计们使用 = 因为使用 LIKE 会显着减慢查询速度,但看到它是如何导致这个问题的,我想知道我应该真正使用什么。这是真的吗?

下面我在 table.

中给出了所有可能的数据
**Raw data (unsorted)**
LN BM1
LN BM2
LN BM3
LN BM4
LN BM5
LN BM6

LN WT1
LN WT2
LN WT3
LN WT4
LN WT5
LN WT6

查询码

(CASE
            WHEN jobs.Uf_Production_Line LIKE 'LN BM%' THEN jobs.Uf_Production_Line
            WHEN jobs.Uf_Production_Line LIKE 'LN WT%' THEN jobs.Uf_Production_Line

            ELSE

            (CASE

                WHEN    IsNumeric(RIGHT(jobs.Uf_Production_Line, 4)) = 1 
                    THEN RIGHT(jobs.Uf_Production_Line, 4)

                ELSE    

                    (CASE
                        WHEN    IsNumeric(RIGHT(jobs.Uf_Production_Line, 3)) = 1 
                            THEN RIGHT(jobs.Uf_Production_Line, 3)
                        ELSE    
                            '99999'
                    END)
            END) 


        END
    ) AS line

查询底部的ORDER BY语句似乎没有效果,因为在Report Builder的Design View中有不同的基于Row Groups的分组和排序规则

ORDER BY job, datevalue, shift

当你使用 "LN bm%" 之类的东西时,这里的“%”意味着任何东西都可以跟在这之后。这意味着它对任何类型的词都是开放的,所以在这种情况下 = 是真正的使用方式。因为您已经提到它应该以 "LN bm" 开头,之后的任何关键字都是可能的:)

如果您没有为查询指定任何排序,记录将按照数据库找到它们的顺序出现。

更改运算符可能会导致不同的执行计划。这意味着数据将使用不同的方法来查找正确的数据,并且将根据这些方法处理数据的方式按顺序返回行。

例如,索引扫描会按照该索引的顺序生成行,但是 table 扫描会按照它们恰好存储在 table 中的顺序生成行。

即使对于同一个查询,执行计划也可能会发生变化。数据库收集有关它用来选择执行计划的数据的统计信息,因此它可能会选择不同的计划,因为它对数据有更好的了解。

如果不指定查询的排序,您永远无法确定顺序是什么,甚至无法确定它会保持不变。