SQL程序改变我的代码

时间:2017-02-21 10:58:45

标签: sql-server

代码有问题:

SELECT Konta.ID, Konta.Okres, Konta.Symbol, Konta.Nazwa
FROM ep15_opisie.dbo.Konta Konta
WHERE (LEN(Konta.Symbol)='5') AND (((Konta.Symbol Like '%221%') OR (Konta.Symbol Like '%222%') OR (Konta.Symbol Like '%302%') OR (Konta.Symbol Like '%700%'))

但我正在使用的程序(Microsoft Query)将代码更改为:

SELECT Konta.ID, Konta.Okres, Konta.Symbol, Konta.Nazwa
FROM ep15_opisie.dbo.Konta Konta
WHERE (Konta.Symbol Like '%221%') AND (LEN(Konta.Symbol)='5') OR (Konta.Symbol Like '%222%') AND (LEN(Konta.Symbol)='5') OR (Konta.Symbol Like '%302%') AND (LEN(Konta.Symbol)='5') OR (Konta.Symbol Like '%700%') AND (LEN(Konta.Symbol)='5')

它乘以LEN参数。这对我来说没有意义,因为我希望所有的争论都有5的LEN,但不同的像'XXX'。我正在使用SQL Server。

只使用一个LEN参数的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

我认为解析器逻辑正确。无论如何,尝试写这样的东西怎么样。我认为表演可能会保持不变。

SELECT *
FROM (
    SELECT Konta.ID
        ,Konta.Okres
        ,Konta.Symbol
        ,Konta.Nazwa
    FROM ep15_opisie.dbo.Konta Konta
    WHERE (
            (
                (Konta.Symbol LIKE '%221%')
                OR (Konta.Symbol LIKE '%222%')
                OR (Konta.Symbol LIKE '%302%')
                OR (Konta.Symbol LIKE '%700%')
                )
            )
    ) Konta
WHERE (LEN(Konta.Symbol) = '5')