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

时间:2015-08-17 17:02:00

标签: sql-server sorting operators sql-like reportbuilder3.0

我正在使用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

为什么使用不同的运算符会导致排序差异?如何让我的报告对A-Z进行排序并仍使用=运算符?另一方面,我的一个人告诉我。大家要使用=,因为使用LIKE会大大减慢查询速度,但看看它是如何导致此问题的,我想知道我应该使用什么。这是真的吗?

下面我已经在表格中提供了所有可能的数据。

**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语句似乎没有任何效果,因为在报表生成器的“设计视图”中有基于行组的不同分组和排序规则

ORDER BY job, datevalue, shift

2 个答案:

答案 0 :(得分:0)

当您使用类似" LN bm%",这里"%"意味着事后可以有任何事情发生。这意味着对任何类型的单词都是开放的,所以在这种情况下=是真正的使用方式。因为你已经提到它应该以" LN bm"以及之后的任何关键词:)

答案 1 :(得分:0)

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

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

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

即使是相同的查询,执行计划也可以更改。数据库收集有关用于选择执行计划的数据的统计信息,因此可以选择不同的计划,因为它对数据有了更好的了解。

如果没有指定查询的排序,您可以简单地确定订单是什么,甚至不会保持相同。