Sql server 对基于不同的参数使用AND和OR

Sql server 对基于不同的参数使用AND和OR,sql-server,tsql,azure-sql-database,Sql Server,Tsql,Azure Sql Database,我有以下问题 我遇到的问题与查询的以下行有关: AND DateOfBirth BETWEEN ISNULL(@LowerDate,DateOfBirth) AND ISNULL(@UpperDate,DateOfBirth) 以下是如何设置参数的示例: --works correctly with an OR for DateOfBirth --DECLARE @SearchWords NVARCHAR(MAX) = '1995' --DECLARE @Lower

我有以下问题

我遇到的问题与查询的以下行有关:

  AND DateOfBirth BETWEEN ISNULL(@LowerDate,DateOfBirth) AND ISNULL(@UpperDate,DateOfBirth)
以下是如何设置参数的示例:

    --works correctly with an OR for DateOfBirth
    --DECLARE @SearchWords NVARCHAR(MAX) = '1995'
    --DECLARE @LowerDate DATE = '01 Jan 1995'
    --DECLARE @UpperDate DATE = '31 Dec 1995'
这将显示其中一个文本字段中带有“1995”的客户端,以及在这些日期之间出生的所有客户端

    --works correctly with an AND for DateOfBirth
    --DECLARE @SearchWords NVARCHAR(MAX) = 'mich'
    --DECLARE @LowerDate DATE = NULL
    --DECLARE @UpperDate DATE = NULL
这将显示在其中一个文本字段中某处具有mich的所有客户端

第一组参数通过使用出生日期间隔获得正确结果,第二组参数通过使用出生日期间隔获得正确结果

如何更改查询以使其适用于所传递的两种类型的参数

    CREATE TABLE #SearchWords
    (
        ID int IDENTITY(1,1),
        Word NVARCHAR(50)
    )

    INSERT INTO #SearchWords
    (
        Word
    )
    SELECT 
        value 
    FROM 
        STRING_SPLIT(@SearchWords, ' ')  
    WHERE 
        TRIM(value) <> ''

SELECT
    ClientID,
    FirstName,
    LastName,
    VerificationCode,
    DateOfBirth
FROM Client c
WHERE EXISTS(
          SELECT *
          FROM #SearchWords s
          WHERE (c.FirstName LIKE CONCAT('%',s.Word,'%'))
             OR (c.LastName LIKE CONCAT('%',s.Word,'%'))
             OR (c.VerificationCode LIKE CONCAT('%',s.Word,'%'))
        )
  AND DateOfBirth BETWEEN ISNULL(@LowerDate,DateOfBirth) AND ISNULL(@UpperDate,DateOfBirth)

  drop table #SearchWords

GO

这符合两个预期结果:

or (
     (@LowerDate IS NOT NULL AND DateOfBirth BETWEEN @LowerDate AND @UpperDate)
    )
查询1

    DECLARE @SearchWords NVARCHAR(MAX) = 'li'
    DECLARE @LowerDate DATE = NULL
    DECLARE @UpperDate DATE = NULL

SELECT
    'Suggest1',
    ClientID,
    FirstName,
    LastName,
    VerificationCode,
    DateOfBirth
FROM Clients c
WHERE EXISTS(
          SELECT *
          FROM SearchWordsTwo s
          WHERE (c.FirstName LIKE CONCAT('%',s.Word,'%'))
             OR (c.LastName LIKE CONCAT('%',s.Word,'%'))
             OR (c.VerificationCode LIKE CONCAT('%',s.Word,'%'))
        )
or (
     (@LowerDate IS NOT NULL AND DateOfBirth BETWEEN @LowerDate AND @UpperDate)
    )
|          | ClientID | FirstName | LastName | VerificationCode | DateOfBirth |
|----------|----------|-----------|----------|------------------|-------------|
| Suggest1 |     1506 |    George |  Coleman |       brilliance |  1995-06-03 |
| Suggest1 |     2600 |      Lisa |  Stanley |             rice |  1995-06-03 |
| Suggest1 |     2984 |    Lionel |     Knox |       disappoint |  1995-05-03 |
| Suggest1 |     3206 |    Lionel |  Stanley |          reflect |  1995-02-03 |
-- -------------------------------------------
     --works correctly with an AND for DateOfBirth
    DECLARE @SearchWords NVARCHAR(MAX) = 'li'
    DECLARE @LowerDate DATE = NULL
    DECLARE @UpperDate DATE = NULL

SELECT
    'Correct1',
    ClientID,
    FirstName,
    LastName,
    VerificationCode,
    DateOfBirth
FROM Clients c
WHERE EXISTS(
          SELECT *
          FROM SearchWordsTwo s
          WHERE (c.FirstName LIKE CONCAT('%',s.Word,'%'))
             OR (c.LastName LIKE CONCAT('%',s.Word,'%'))
             OR (c.VerificationCode LIKE CONCAT('%',s.Word,'%'))
        )
  AND DateOfBirth BETWEEN ISNULL(@LowerDate,DateOfBirth) AND ISNULL(@UpperDate,DateOfBirth)
|          | ClientID | FirstName | LastName | VerificationCode | DateOfBirth |
|----------|----------|-----------|----------|------------------|-------------|
| Correct1 |     1506 |    George |  Coleman |       brilliance |  1995-06-03 |
| Correct1 |     2600 |      Lisa |  Stanley |             rice |  1995-06-03 |
| Correct1 |     2984 |    Lionel |     Knox |       disappoint |  1995-05-03 |
| Correct1 |     3206 |    Lionel |  Stanley |          reflect |  1995-02-03 |
-- -------------------------------------------

    DECLARE @SearchWords NVARCHAR(MAX) = '1995'
    DECLARE @LowerDate DATE = '01 Jan 1995'
    DECLARE @UpperDate DATE = '31 Dec 1995'

SELECT
    'Suggest2',
    ClientID,
    FirstName,
    LastName,
    VerificationCode,
    DateOfBirth
FROM Clients c
WHERE EXISTS(
          SELECT *
          FROM SearchWords s
          WHERE (c.FirstName LIKE CONCAT('%',s.Word,'%'))
             OR (c.LastName LIKE CONCAT('%',s.Word,'%'))
             OR (c.VerificationCode LIKE CONCAT('%',s.Word,'%'))
        )
or (
     (@LowerDate IS NOT NULL AND DateOfBirth BETWEEN @LowerDate AND @UpperDate)
    )
|          | ClientID |    FirstName |   LastName | VerificationCode | DateOfBirth |
|----------|----------|--------------|------------|------------------|-------------|
| Suggest2 |      206 | Richard 1995 |    Douglas |              bee |  1948-01-03 |
| Suggest2 |      404 |        thank | yourselves |           whattt |  1995-12-03 |
| Suggest2 |      670 |     Ida 1995 |    Delgado |             mild |  1995-02-03 |
| Suggest2 |     1506 |       George |    Coleman |       brilliance |  1995-06-03 |
| Suggest2 |     2384 |        Lewis |       Rice |       instrument |  1995-04-03 |
| Suggest2 |     2600 |         Lisa |    Stanley |             rice |  1995-06-03 |
| Suggest2 |     2974 |      Hammett |    Hopkins |          snuggle |  1995-05-03 |
| Suggest2 |     2984 |       Lionel |       Knox |       disappoint |  1995-05-03 |
| Suggest2 |     3105 |       Ciaran |    Delgado |            strip |  1995-11-03 |
| Suggest2 |     3206 |       Lionel |    Stanley |          reflect |  1995-02-03 |
| Suggest2 |     3317 |        Ethan |       Rice |              bay |  1995-06-03 |
| Suggest2 |     3534 |         Jack |      Vance |         security |  1995-04-03 |
| Suggest2 |     3654 |         Elmo |      Smith |              sum |  1995-01-03 |
| Suggest2 |     3881 |     Michelle |      Watts |            night |  1995-11-03 |
| Suggest2 |     4533 |         Otto |    Hopkins |           appeal |  1995-06-03 |
| Suggest2 |     4929 |       Carlos |   Harrison |             gree |  1995-02-03 |
| Suggest2 |     5052 |        Hiram |      Nunez |            rumor |  1995-08-03 |
| Suggest2 |     5148 |    Stephanie |    Russell |           expect |  1995-05-03 |
| Suggest2 |     5240 |         Kato |      Gibbs |       appearance |  1995-06-03 |
-- -------------------------------------------

   --works correctly with an OR for DateOfBirth
    DECLARE @SearchWords NVARCHAR(MAX) = '1995'
    DECLARE @LowerDate DATE = '01 Jan 1995'
    DECLARE @UpperDate DATE = '31 Dec 1995'

SELECT
    'Correct2',
    ClientID,
    FirstName,
    LastName,
    VerificationCode,
    DateOfBirth
FROM Clients c
WHERE EXISTS(
          SELECT *
          FROM SearchWords s
          WHERE (c.FirstName LIKE CONCAT('%',s.Word,'%'))
             OR (c.LastName LIKE CONCAT('%',s.Word,'%'))
             OR (c.VerificationCode LIKE CONCAT('%',s.Word,'%'))
        )
  OR DateOfBirth BETWEEN ISNULL(@LowerDate,DateOfBirth) AND ISNULL(@UpperDate,DateOfBirth)
|          | ClientID |    FirstName |   LastName | VerificationCode | DateOfBirth |
|----------|----------|--------------|------------|------------------|-------------|
| Correct2 |      206 | Richard 1995 |    Douglas |              bee |  1948-01-03 |
| Correct2 |      404 |        thank | yourselves |           whattt |  1995-12-03 |
| Correct2 |      670 |     Ida 1995 |    Delgado |             mild |  1995-02-03 |
| Correct2 |     1506 |       George |    Coleman |       brilliance |  1995-06-03 |
| Correct2 |     2384 |        Lewis |       Rice |       instrument |  1995-04-03 |
| Correct2 |     2600 |         Lisa |    Stanley |             rice |  1995-06-03 |
| Correct2 |     2974 |      Hammett |    Hopkins |          snuggle |  1995-05-03 |
| Correct2 |     2984 |       Lionel |       Knox |       disappoint |  1995-05-03 |
| Correct2 |     3105 |       Ciaran |    Delgado |            strip |  1995-11-03 |
| Correct2 |     3206 |       Lionel |    Stanley |          reflect |  1995-02-03 |
| Correct2 |     3317 |        Ethan |       Rice |              bay |  1995-06-03 |
| Correct2 |     3534 |         Jack |      Vance |         security |  1995-04-03 |
| Correct2 |     3654 |         Elmo |      Smith |              sum |  1995-01-03 |
| Correct2 |     3881 |     Michelle |      Watts |            night |  1995-11-03 |
| Correct2 |     4533 |         Otto |    Hopkins |           appeal |  1995-06-03 |
| Correct2 |     4929 |       Carlos |   Harrison |             gree |  1995-02-03 |
| Correct2 |     5052 |        Hiram |      Nunez |            rumor |  1995-08-03 |
| Correct2 |     5148 |    Stephanie |    Russell |           expect |  1995-05-03 |
| Correct2 |     5240 |         Kato |      Gibbs |       appearance |  1995-06-03 |

    DECLARE @SearchWords NVARCHAR(MAX) = 'li'
    DECLARE @LowerDate DATE = NULL
    DECLARE @UpperDate DATE = NULL

SELECT
    'Suggest1',
    ClientID,
    FirstName,
    LastName,
    VerificationCode,
    DateOfBirth
FROM Clients c
WHERE EXISTS(
          SELECT *
          FROM SearchWordsTwo s
          WHERE (c.FirstName LIKE CONCAT('%',s.Word,'%'))
             OR (c.LastName LIKE CONCAT('%',s.Word,'%'))
             OR (c.VerificationCode LIKE CONCAT('%',s.Word,'%'))
        )
or (
     (@LowerDate IS NOT NULL AND DateOfBirth BETWEEN @LowerDate AND @UpperDate)
    )
|          | ClientID | FirstName | LastName | VerificationCode | DateOfBirth |
|----------|----------|-----------|----------|------------------|-------------|
| Suggest1 |     1506 |    George |  Coleman |       brilliance |  1995-06-03 |
| Suggest1 |     2600 |      Lisa |  Stanley |             rice |  1995-06-03 |
| Suggest1 |     2984 |    Lionel |     Knox |       disappoint |  1995-05-03 |
| Suggest1 |     3206 |    Lionel |  Stanley |          reflect |  1995-02-03 |
-- -------------------------------------------
     --works correctly with an AND for DateOfBirth
    DECLARE @SearchWords NVARCHAR(MAX) = 'li'
    DECLARE @LowerDate DATE = NULL
    DECLARE @UpperDate DATE = NULL

SELECT
    'Correct1',
    ClientID,
    FirstName,
    LastName,
    VerificationCode,
    DateOfBirth
FROM Clients c
WHERE EXISTS(
          SELECT *
          FROM SearchWordsTwo s
          WHERE (c.FirstName LIKE CONCAT('%',s.Word,'%'))
             OR (c.LastName LIKE CONCAT('%',s.Word,'%'))
             OR (c.VerificationCode LIKE CONCAT('%',s.Word,'%'))
        )
  AND DateOfBirth BETWEEN ISNULL(@LowerDate,DateOfBirth) AND ISNULL(@UpperDate,DateOfBirth)
|          | ClientID | FirstName | LastName | VerificationCode | DateOfBirth |
|----------|----------|-----------|----------|------------------|-------------|
| Correct1 |     1506 |    George |  Coleman |       brilliance |  1995-06-03 |
| Correct1 |     2600 |      Lisa |  Stanley |             rice |  1995-06-03 |
| Correct1 |     2984 |    Lionel |     Knox |       disappoint |  1995-05-03 |
| Correct1 |     3206 |    Lionel |  Stanley |          reflect |  1995-02-03 |
-- -------------------------------------------

    DECLARE @SearchWords NVARCHAR(MAX) = '1995'
    DECLARE @LowerDate DATE = '01 Jan 1995'
    DECLARE @UpperDate DATE = '31 Dec 1995'

SELECT
    'Suggest2',
    ClientID,
    FirstName,
    LastName,
    VerificationCode,
    DateOfBirth
FROM Clients c
WHERE EXISTS(
          SELECT *
          FROM SearchWords s
          WHERE (c.FirstName LIKE CONCAT('%',s.Word,'%'))
             OR (c.LastName LIKE CONCAT('%',s.Word,'%'))
             OR (c.VerificationCode LIKE CONCAT('%',s.Word,'%'))
        )
or (
     (@LowerDate IS NOT NULL AND DateOfBirth BETWEEN @LowerDate AND @UpperDate)
    )
|          | ClientID |    FirstName |   LastName | VerificationCode | DateOfBirth |
|----------|----------|--------------|------------|------------------|-------------|
| Suggest2 |      206 | Richard 1995 |    Douglas |              bee |  1948-01-03 |
| Suggest2 |      404 |        thank | yourselves |           whattt |  1995-12-03 |
| Suggest2 |      670 |     Ida 1995 |    Delgado |             mild |  1995-02-03 |
| Suggest2 |     1506 |       George |    Coleman |       brilliance |  1995-06-03 |
| Suggest2 |     2384 |        Lewis |       Rice |       instrument |  1995-04-03 |
| Suggest2 |     2600 |         Lisa |    Stanley |             rice |  1995-06-03 |
| Suggest2 |     2974 |      Hammett |    Hopkins |          snuggle |  1995-05-03 |
| Suggest2 |     2984 |       Lionel |       Knox |       disappoint |  1995-05-03 |
| Suggest2 |     3105 |       Ciaran |    Delgado |            strip |  1995-11-03 |
| Suggest2 |     3206 |       Lionel |    Stanley |          reflect |  1995-02-03 |
| Suggest2 |     3317 |        Ethan |       Rice |              bay |  1995-06-03 |
| Suggest2 |     3534 |         Jack |      Vance |         security |  1995-04-03 |
| Suggest2 |     3654 |         Elmo |      Smith |              sum |  1995-01-03 |
| Suggest2 |     3881 |     Michelle |      Watts |            night |  1995-11-03 |
| Suggest2 |     4533 |         Otto |    Hopkins |           appeal |  1995-06-03 |
| Suggest2 |     4929 |       Carlos |   Harrison |             gree |  1995-02-03 |
| Suggest2 |     5052 |        Hiram |      Nunez |            rumor |  1995-08-03 |
| Suggest2 |     5148 |    Stephanie |    Russell |           expect |  1995-05-03 |
| Suggest2 |     5240 |         Kato |      Gibbs |       appearance |  1995-06-03 |
-- -------------------------------------------

   --works correctly with an OR for DateOfBirth
    DECLARE @SearchWords NVARCHAR(MAX) = '1995'
    DECLARE @LowerDate DATE = '01 Jan 1995'
    DECLARE @UpperDate DATE = '31 Dec 1995'

SELECT
    'Correct2',
    ClientID,
    FirstName,
    LastName,
    VerificationCode,
    DateOfBirth
FROM Clients c
WHERE EXISTS(
          SELECT *
          FROM SearchWords s
          WHERE (c.FirstName LIKE CONCAT('%',s.Word,'%'))
             OR (c.LastName LIKE CONCAT('%',s.Word,'%'))
             OR (c.VerificationCode LIKE CONCAT('%',s.Word,'%'))
        )
  OR DateOfBirth BETWEEN ISNULL(@LowerDate,DateOfBirth) AND ISNULL(@UpperDate,DateOfBirth)
|          | ClientID |    FirstName |   LastName | VerificationCode | DateOfBirth |
|----------|----------|--------------|------------|------------------|-------------|
| Correct2 |      206 | Richard 1995 |    Douglas |              bee |  1948-01-03 |
| Correct2 |      404 |        thank | yourselves |           whattt |  1995-12-03 |
| Correct2 |      670 |     Ida 1995 |    Delgado |             mild |  1995-02-03 |
| Correct2 |     1506 |       George |    Coleman |       brilliance |  1995-06-03 |
| Correct2 |     2384 |        Lewis |       Rice |       instrument |  1995-04-03 |
| Correct2 |     2600 |         Lisa |    Stanley |             rice |  1995-06-03 |
| Correct2 |     2974 |      Hammett |    Hopkins |          snuggle |  1995-05-03 |
| Correct2 |     2984 |       Lionel |       Knox |       disappoint |  1995-05-03 |
| Correct2 |     3105 |       Ciaran |    Delgado |            strip |  1995-11-03 |
| Correct2 |     3206 |       Lionel |    Stanley |          reflect |  1995-02-03 |
| Correct2 |     3317 |        Ethan |       Rice |              bay |  1995-06-03 |
| Correct2 |     3534 |         Jack |      Vance |         security |  1995-04-03 |
| Correct2 |     3654 |         Elmo |      Smith |              sum |  1995-01-03 |
| Correct2 |     3881 |     Michelle |      Watts |            night |  1995-11-03 |
| Correct2 |     4533 |         Otto |    Hopkins |           appeal |  1995-06-03 |
| Correct2 |     4929 |       Carlos |   Harrison |             gree |  1995-02-03 |
| Correct2 |     5052 |        Hiram |      Nunez |            rumor |  1995-08-03 |
| Correct2 |     5148 |    Stephanie |    Russell |           expect |  1995-05-03 |
| Correct2 |     5240 |         Kato |      Gibbs |       appearance |  1995-06-03 |
查询2

    DECLARE @SearchWords NVARCHAR(MAX) = 'li'
    DECLARE @LowerDate DATE = NULL
    DECLARE @UpperDate DATE = NULL

SELECT
    'Suggest1',
    ClientID,
    FirstName,
    LastName,
    VerificationCode,
    DateOfBirth
FROM Clients c
WHERE EXISTS(
          SELECT *
          FROM SearchWordsTwo s
          WHERE (c.FirstName LIKE CONCAT('%',s.Word,'%'))
             OR (c.LastName LIKE CONCAT('%',s.Word,'%'))
             OR (c.VerificationCode LIKE CONCAT('%',s.Word,'%'))
        )
or (
     (@LowerDate IS NOT NULL AND DateOfBirth BETWEEN @LowerDate AND @UpperDate)
    )
|          | ClientID | FirstName | LastName | VerificationCode | DateOfBirth |
|----------|----------|-----------|----------|------------------|-------------|
| Suggest1 |     1506 |    George |  Coleman |       brilliance |  1995-06-03 |
| Suggest1 |     2600 |      Lisa |  Stanley |             rice |  1995-06-03 |
| Suggest1 |     2984 |    Lionel |     Knox |       disappoint |  1995-05-03 |
| Suggest1 |     3206 |    Lionel |  Stanley |          reflect |  1995-02-03 |
-- -------------------------------------------
     --works correctly with an AND for DateOfBirth
    DECLARE @SearchWords NVARCHAR(MAX) = 'li'
    DECLARE @LowerDate DATE = NULL
    DECLARE @UpperDate DATE = NULL

SELECT
    'Correct1',
    ClientID,
    FirstName,
    LastName,
    VerificationCode,
    DateOfBirth
FROM Clients c
WHERE EXISTS(
          SELECT *
          FROM SearchWordsTwo s
          WHERE (c.FirstName LIKE CONCAT('%',s.Word,'%'))
             OR (c.LastName LIKE CONCAT('%',s.Word,'%'))
             OR (c.VerificationCode LIKE CONCAT('%',s.Word,'%'))
        )
  AND DateOfBirth BETWEEN ISNULL(@LowerDate,DateOfBirth) AND ISNULL(@UpperDate,DateOfBirth)
|          | ClientID | FirstName | LastName | VerificationCode | DateOfBirth |
|----------|----------|-----------|----------|------------------|-------------|
| Correct1 |     1506 |    George |  Coleman |       brilliance |  1995-06-03 |
| Correct1 |     2600 |      Lisa |  Stanley |             rice |  1995-06-03 |
| Correct1 |     2984 |    Lionel |     Knox |       disappoint |  1995-05-03 |
| Correct1 |     3206 |    Lionel |  Stanley |          reflect |  1995-02-03 |
-- -------------------------------------------

    DECLARE @SearchWords NVARCHAR(MAX) = '1995'
    DECLARE @LowerDate DATE = '01 Jan 1995'
    DECLARE @UpperDate DATE = '31 Dec 1995'

SELECT
    'Suggest2',
    ClientID,
    FirstName,
    LastName,
    VerificationCode,
    DateOfBirth
FROM Clients c
WHERE EXISTS(
          SELECT *
          FROM SearchWords s
          WHERE (c.FirstName LIKE CONCAT('%',s.Word,'%'))
             OR (c.LastName LIKE CONCAT('%',s.Word,'%'))
             OR (c.VerificationCode LIKE CONCAT('%',s.Word,'%'))
        )
or (
     (@LowerDate IS NOT NULL AND DateOfBirth BETWEEN @LowerDate AND @UpperDate)
    )
|          | ClientID |    FirstName |   LastName | VerificationCode | DateOfBirth |
|----------|----------|--------------|------------|------------------|-------------|
| Suggest2 |      206 | Richard 1995 |    Douglas |              bee |  1948-01-03 |
| Suggest2 |      404 |        thank | yourselves |           whattt |  1995-12-03 |
| Suggest2 |      670 |     Ida 1995 |    Delgado |             mild |  1995-02-03 |
| Suggest2 |     1506 |       George |    Coleman |       brilliance |  1995-06-03 |
| Suggest2 |     2384 |        Lewis |       Rice |       instrument |  1995-04-03 |
| Suggest2 |     2600 |         Lisa |    Stanley |             rice |  1995-06-03 |
| Suggest2 |     2974 |      Hammett |    Hopkins |          snuggle |  1995-05-03 |
| Suggest2 |     2984 |       Lionel |       Knox |       disappoint |  1995-05-03 |
| Suggest2 |     3105 |       Ciaran |    Delgado |            strip |  1995-11-03 |
| Suggest2 |     3206 |       Lionel |    Stanley |          reflect |  1995-02-03 |
| Suggest2 |     3317 |        Ethan |       Rice |              bay |  1995-06-03 |
| Suggest2 |     3534 |         Jack |      Vance |         security |  1995-04-03 |
| Suggest2 |     3654 |         Elmo |      Smith |              sum |  1995-01-03 |
| Suggest2 |     3881 |     Michelle |      Watts |            night |  1995-11-03 |
| Suggest2 |     4533 |         Otto |    Hopkins |           appeal |  1995-06-03 |
| Suggest2 |     4929 |       Carlos |   Harrison |             gree |  1995-02-03 |
| Suggest2 |     5052 |        Hiram |      Nunez |            rumor |  1995-08-03 |
| Suggest2 |     5148 |    Stephanie |    Russell |           expect |  1995-05-03 |
| Suggest2 |     5240 |         Kato |      Gibbs |       appearance |  1995-06-03 |
-- -------------------------------------------

   --works correctly with an OR for DateOfBirth
    DECLARE @SearchWords NVARCHAR(MAX) = '1995'
    DECLARE @LowerDate DATE = '01 Jan 1995'
    DECLARE @UpperDate DATE = '31 Dec 1995'

SELECT
    'Correct2',
    ClientID,
    FirstName,
    LastName,
    VerificationCode,
    DateOfBirth
FROM Clients c
WHERE EXISTS(
          SELECT *
          FROM SearchWords s
          WHERE (c.FirstName LIKE CONCAT('%',s.Word,'%'))
             OR (c.LastName LIKE CONCAT('%',s.Word,'%'))
             OR (c.VerificationCode LIKE CONCAT('%',s.Word,'%'))
        )
  OR DateOfBirth BETWEEN ISNULL(@LowerDate,DateOfBirth) AND ISNULL(@UpperDate,DateOfBirth)
|          | ClientID |    FirstName |   LastName | VerificationCode | DateOfBirth |
|----------|----------|--------------|------------|------------------|-------------|
| Correct2 |      206 | Richard 1995 |    Douglas |              bee |  1948-01-03 |
| Correct2 |      404 |        thank | yourselves |           whattt |  1995-12-03 |
| Correct2 |      670 |     Ida 1995 |    Delgado |             mild |  1995-02-03 |
| Correct2 |     1506 |       George |    Coleman |       brilliance |  1995-06-03 |
| Correct2 |     2384 |        Lewis |       Rice |       instrument |  1995-04-03 |
| Correct2 |     2600 |         Lisa |    Stanley |             rice |  1995-06-03 |
| Correct2 |     2974 |      Hammett |    Hopkins |          snuggle |  1995-05-03 |
| Correct2 |     2984 |       Lionel |       Knox |       disappoint |  1995-05-03 |
| Correct2 |     3105 |       Ciaran |    Delgado |            strip |  1995-11-03 |
| Correct2 |     3206 |       Lionel |    Stanley |          reflect |  1995-02-03 |
| Correct2 |     3317 |        Ethan |       Rice |              bay |  1995-06-03 |
| Correct2 |     3534 |         Jack |      Vance |         security |  1995-04-03 |
| Correct2 |     3654 |         Elmo |      Smith |              sum |  1995-01-03 |
| Correct2 |     3881 |     Michelle |      Watts |            night |  1995-11-03 |
| Correct2 |     4533 |         Otto |    Hopkins |           appeal |  1995-06-03 |
| Correct2 |     4929 |       Carlos |   Harrison |             gree |  1995-02-03 |
| Correct2 |     5052 |        Hiram |      Nunez |            rumor |  1995-08-03 |
| Correct2 |     5148 |    Stephanie |    Russell |           expect |  1995-05-03 |
| Correct2 |     5240 |         Kato |      Gibbs |       appearance |  1995-06-03 |

    DECLARE @SearchWords NVARCHAR(MAX) = 'li'
    DECLARE @LowerDate DATE = NULL
    DECLARE @UpperDate DATE = NULL

SELECT
    'Suggest1',
    ClientID,
    FirstName,
    LastName,
    VerificationCode,
    DateOfBirth
FROM Clients c
WHERE EXISTS(
          SELECT *
          FROM SearchWordsTwo s
          WHERE (c.FirstName LIKE CONCAT('%',s.Word,'%'))
             OR (c.LastName LIKE CONCAT('%',s.Word,'%'))
             OR (c.VerificationCode LIKE CONCAT('%',s.Word,'%'))
        )
or (
     (@LowerDate IS NOT NULL AND DateOfBirth BETWEEN @LowerDate AND @UpperDate)
    )
|          | ClientID | FirstName | LastName | VerificationCode | DateOfBirth |
|----------|----------|-----------|----------|------------------|-------------|
| Suggest1 |     1506 |    George |  Coleman |       brilliance |  1995-06-03 |
| Suggest1 |     2600 |      Lisa |  Stanley |             rice |  1995-06-03 |
| Suggest1 |     2984 |    Lionel |     Knox |       disappoint |  1995-05-03 |
| Suggest1 |     3206 |    Lionel |  Stanley |          reflect |  1995-02-03 |
-- -------------------------------------------
     --works correctly with an AND for DateOfBirth
    DECLARE @SearchWords NVARCHAR(MAX) = 'li'
    DECLARE @LowerDate DATE = NULL
    DECLARE @UpperDate DATE = NULL

SELECT
    'Correct1',
    ClientID,
    FirstName,
    LastName,
    VerificationCode,
    DateOfBirth
FROM Clients c
WHERE EXISTS(
          SELECT *
          FROM SearchWordsTwo s
          WHERE (c.FirstName LIKE CONCAT('%',s.Word,'%'))
             OR (c.LastName LIKE CONCAT('%',s.Word,'%'))
             OR (c.VerificationCode LIKE CONCAT('%',s.Word,'%'))
        )
  AND DateOfBirth BETWEEN ISNULL(@LowerDate,DateOfBirth) AND ISNULL(@UpperDate,DateOfBirth)
|          | ClientID | FirstName | LastName | VerificationCode | DateOfBirth |
|----------|----------|-----------|----------|------------------|-------------|
| Correct1 |     1506 |    George |  Coleman |       brilliance |  1995-06-03 |
| Correct1 |     2600 |      Lisa |  Stanley |             rice |  1995-06-03 |
| Correct1 |     2984 |    Lionel |     Knox |       disappoint |  1995-05-03 |
| Correct1 |     3206 |    Lionel |  Stanley |          reflect |  1995-02-03 |
-- -------------------------------------------

    DECLARE @SearchWords NVARCHAR(MAX) = '1995'
    DECLARE @LowerDate DATE = '01 Jan 1995'
    DECLARE @UpperDate DATE = '31 Dec 1995'

SELECT
    'Suggest2',
    ClientID,
    FirstName,
    LastName,
    VerificationCode,
    DateOfBirth
FROM Clients c
WHERE EXISTS(
          SELECT *
          FROM SearchWords s
          WHERE (c.FirstName LIKE CONCAT('%',s.Word,'%'))
             OR (c.LastName LIKE CONCAT('%',s.Word,'%'))
             OR (c.VerificationCode LIKE CONCAT('%',s.Word,'%'))
        )
or (
     (@LowerDate IS NOT NULL AND DateOfBirth BETWEEN @LowerDate AND @UpperDate)
    )
|          | ClientID |    FirstName |   LastName | VerificationCode | DateOfBirth |
|----------|----------|--------------|------------|------------------|-------------|
| Suggest2 |      206 | Richard 1995 |    Douglas |              bee |  1948-01-03 |
| Suggest2 |      404 |        thank | yourselves |           whattt |  1995-12-03 |
| Suggest2 |      670 |     Ida 1995 |    Delgado |             mild |  1995-02-03 |
| Suggest2 |     1506 |       George |    Coleman |       brilliance |  1995-06-03 |
| Suggest2 |     2384 |        Lewis |       Rice |       instrument |  1995-04-03 |
| Suggest2 |     2600 |         Lisa |    Stanley |             rice |  1995-06-03 |
| Suggest2 |     2974 |      Hammett |    Hopkins |          snuggle |  1995-05-03 |
| Suggest2 |     2984 |       Lionel |       Knox |       disappoint |  1995-05-03 |
| Suggest2 |     3105 |       Ciaran |    Delgado |            strip |  1995-11-03 |
| Suggest2 |     3206 |       Lionel |    Stanley |          reflect |  1995-02-03 |
| Suggest2 |     3317 |        Ethan |       Rice |              bay |  1995-06-03 |
| Suggest2 |     3534 |         Jack |      Vance |         security |  1995-04-03 |
| Suggest2 |     3654 |         Elmo |      Smith |              sum |  1995-01-03 |
| Suggest2 |     3881 |     Michelle |      Watts |            night |  1995-11-03 |
| Suggest2 |     4533 |         Otto |    Hopkins |           appeal |  1995-06-03 |
| Suggest2 |     4929 |       Carlos |   Harrison |             gree |  1995-02-03 |
| Suggest2 |     5052 |        Hiram |      Nunez |            rumor |  1995-08-03 |
| Suggest2 |     5148 |    Stephanie |    Russell |           expect |  1995-05-03 |
| Suggest2 |     5240 |         Kato |      Gibbs |       appearance |  1995-06-03 |
-- -------------------------------------------

   --works correctly with an OR for DateOfBirth
    DECLARE @SearchWords NVARCHAR(MAX) = '1995'
    DECLARE @LowerDate DATE = '01 Jan 1995'
    DECLARE @UpperDate DATE = '31 Dec 1995'

SELECT
    'Correct2',
    ClientID,
    FirstName,
    LastName,
    VerificationCode,
    DateOfBirth
FROM Clients c
WHERE EXISTS(
          SELECT *
          FROM SearchWords s
          WHERE (c.FirstName LIKE CONCAT('%',s.Word,'%'))
             OR (c.LastName LIKE CONCAT('%',s.Word,'%'))
             OR (c.VerificationCode LIKE CONCAT('%',s.Word,'%'))
        )
  OR DateOfBirth BETWEEN ISNULL(@LowerDate,DateOfBirth) AND ISNULL(@UpperDate,DateOfBirth)
|          | ClientID |    FirstName |   LastName | VerificationCode | DateOfBirth |
|----------|----------|--------------|------------|------------------|-------------|
| Correct2 |      206 | Richard 1995 |    Douglas |              bee |  1948-01-03 |
| Correct2 |      404 |        thank | yourselves |           whattt |  1995-12-03 |
| Correct2 |      670 |     Ida 1995 |    Delgado |             mild |  1995-02-03 |
| Correct2 |     1506 |       George |    Coleman |       brilliance |  1995-06-03 |
| Correct2 |     2384 |        Lewis |       Rice |       instrument |  1995-04-03 |
| Correct2 |     2600 |         Lisa |    Stanley |             rice |  1995-06-03 |
| Correct2 |     2974 |      Hammett |    Hopkins |          snuggle |  1995-05-03 |
| Correct2 |     2984 |       Lionel |       Knox |       disappoint |  1995-05-03 |
| Correct2 |     3105 |       Ciaran |    Delgado |            strip |  1995-11-03 |
| Correct2 |     3206 |       Lionel |    Stanley |          reflect |  1995-02-03 |
| Correct2 |     3317 |        Ethan |       Rice |              bay |  1995-06-03 |
| Correct2 |     3534 |         Jack |      Vance |         security |  1995-04-03 |
| Correct2 |     3654 |         Elmo |      Smith |              sum |  1995-01-03 |
| Correct2 |     3881 |     Michelle |      Watts |            night |  1995-11-03 |
| Correct2 |     4533 |         Otto |    Hopkins |           appeal |  1995-06-03 |
| Correct2 |     4929 |       Carlos |   Harrison |             gree |  1995-02-03 |
| Correct2 |     5052 |        Hiram |      Nunez |            rumor |  1995-08-03 |
| Correct2 |     5148 |    Stephanie |    Russell |           expect |  1995-05-03 |
| Correct2 |     5240 |         Kato |      Gibbs |       appearance |  1995-06-03 |
查询3

    DECLARE @SearchWords NVARCHAR(MAX) = 'li'
    DECLARE @LowerDate DATE = NULL
    DECLARE @UpperDate DATE = NULL

SELECT
    'Suggest1',
    ClientID,
    FirstName,
    LastName,
    VerificationCode,
    DateOfBirth
FROM Clients c
WHERE EXISTS(
          SELECT *
          FROM SearchWordsTwo s
          WHERE (c.FirstName LIKE CONCAT('%',s.Word,'%'))
             OR (c.LastName LIKE CONCAT('%',s.Word,'%'))
             OR (c.VerificationCode LIKE CONCAT('%',s.Word,'%'))
        )
or (
     (@LowerDate IS NOT NULL AND DateOfBirth BETWEEN @LowerDate AND @UpperDate)
    )
|          | ClientID | FirstName | LastName | VerificationCode | DateOfBirth |
|----------|----------|-----------|----------|------------------|-------------|
| Suggest1 |     1506 |    George |  Coleman |       brilliance |  1995-06-03 |
| Suggest1 |     2600 |      Lisa |  Stanley |             rice |  1995-06-03 |
| Suggest1 |     2984 |    Lionel |     Knox |       disappoint |  1995-05-03 |
| Suggest1 |     3206 |    Lionel |  Stanley |          reflect |  1995-02-03 |
-- -------------------------------------------
     --works correctly with an AND for DateOfBirth
    DECLARE @SearchWords NVARCHAR(MAX) = 'li'
    DECLARE @LowerDate DATE = NULL
    DECLARE @UpperDate DATE = NULL

SELECT
    'Correct1',
    ClientID,
    FirstName,
    LastName,
    VerificationCode,
    DateOfBirth
FROM Clients c
WHERE EXISTS(
          SELECT *
          FROM SearchWordsTwo s
          WHERE (c.FirstName LIKE CONCAT('%',s.Word,'%'))
             OR (c.LastName LIKE CONCAT('%',s.Word,'%'))
             OR (c.VerificationCode LIKE CONCAT('%',s.Word,'%'))
        )
  AND DateOfBirth BETWEEN ISNULL(@LowerDate,DateOfBirth) AND ISNULL(@UpperDate,DateOfBirth)
|          | ClientID | FirstName | LastName | VerificationCode | DateOfBirth |
|----------|----------|-----------|----------|------------------|-------------|
| Correct1 |     1506 |    George |  Coleman |       brilliance |  1995-06-03 |
| Correct1 |     2600 |      Lisa |  Stanley |             rice |  1995-06-03 |
| Correct1 |     2984 |    Lionel |     Knox |       disappoint |  1995-05-03 |
| Correct1 |     3206 |    Lionel |  Stanley |          reflect |  1995-02-03 |
-- -------------------------------------------

    DECLARE @SearchWords NVARCHAR(MAX) = '1995'
    DECLARE @LowerDate DATE = '01 Jan 1995'
    DECLARE @UpperDate DATE = '31 Dec 1995'

SELECT
    'Suggest2',
    ClientID,
    FirstName,
    LastName,
    VerificationCode,
    DateOfBirth
FROM Clients c
WHERE EXISTS(
          SELECT *
          FROM SearchWords s
          WHERE (c.FirstName LIKE CONCAT('%',s.Word,'%'))
             OR (c.LastName LIKE CONCAT('%',s.Word,'%'))
             OR (c.VerificationCode LIKE CONCAT('%',s.Word,'%'))
        )
or (
     (@LowerDate IS NOT NULL AND DateOfBirth BETWEEN @LowerDate AND @UpperDate)
    )
|          | ClientID |    FirstName |   LastName | VerificationCode | DateOfBirth |
|----------|----------|--------------|------------|------------------|-------------|
| Suggest2 |      206 | Richard 1995 |    Douglas |              bee |  1948-01-03 |
| Suggest2 |      404 |        thank | yourselves |           whattt |  1995-12-03 |
| Suggest2 |      670 |     Ida 1995 |    Delgado |             mild |  1995-02-03 |
| Suggest2 |     1506 |       George |    Coleman |       brilliance |  1995-06-03 |
| Suggest2 |     2384 |        Lewis |       Rice |       instrument |  1995-04-03 |
| Suggest2 |     2600 |         Lisa |    Stanley |             rice |  1995-06-03 |
| Suggest2 |     2974 |      Hammett |    Hopkins |          snuggle |  1995-05-03 |
| Suggest2 |     2984 |       Lionel |       Knox |       disappoint |  1995-05-03 |
| Suggest2 |     3105 |       Ciaran |    Delgado |            strip |  1995-11-03 |
| Suggest2 |     3206 |       Lionel |    Stanley |          reflect |  1995-02-03 |
| Suggest2 |     3317 |        Ethan |       Rice |              bay |  1995-06-03 |
| Suggest2 |     3534 |         Jack |      Vance |         security |  1995-04-03 |
| Suggest2 |     3654 |         Elmo |      Smith |              sum |  1995-01-03 |
| Suggest2 |     3881 |     Michelle |      Watts |            night |  1995-11-03 |
| Suggest2 |     4533 |         Otto |    Hopkins |           appeal |  1995-06-03 |
| Suggest2 |     4929 |       Carlos |   Harrison |             gree |  1995-02-03 |
| Suggest2 |     5052 |        Hiram |      Nunez |            rumor |  1995-08-03 |
| Suggest2 |     5148 |    Stephanie |    Russell |           expect |  1995-05-03 |
| Suggest2 |     5240 |         Kato |      Gibbs |       appearance |  1995-06-03 |
-- -------------------------------------------

   --works correctly with an OR for DateOfBirth
    DECLARE @SearchWords NVARCHAR(MAX) = '1995'
    DECLARE @LowerDate DATE = '01 Jan 1995'
    DECLARE @UpperDate DATE = '31 Dec 1995'

SELECT
    'Correct2',
    ClientID,
    FirstName,
    LastName,
    VerificationCode,
    DateOfBirth
FROM Clients c
WHERE EXISTS(
          SELECT *
          FROM SearchWords s
          WHERE (c.FirstName LIKE CONCAT('%',s.Word,'%'))
             OR (c.LastName LIKE CONCAT('%',s.Word,'%'))
             OR (c.VerificationCode LIKE CONCAT('%',s.Word,'%'))
        )
  OR DateOfBirth BETWEEN ISNULL(@LowerDate,DateOfBirth) AND ISNULL(@UpperDate,DateOfBirth)
|          | ClientID |    FirstName |   LastName | VerificationCode | DateOfBirth |
|----------|----------|--------------|------------|------------------|-------------|
| Correct2 |      206 | Richard 1995 |    Douglas |              bee |  1948-01-03 |
| Correct2 |      404 |        thank | yourselves |           whattt |  1995-12-03 |
| Correct2 |      670 |     Ida 1995 |    Delgado |             mild |  1995-02-03 |
| Correct2 |     1506 |       George |    Coleman |       brilliance |  1995-06-03 |
| Correct2 |     2384 |        Lewis |       Rice |       instrument |  1995-04-03 |
| Correct2 |     2600 |         Lisa |    Stanley |             rice |  1995-06-03 |
| Correct2 |     2974 |      Hammett |    Hopkins |          snuggle |  1995-05-03 |
| Correct2 |     2984 |       Lionel |       Knox |       disappoint |  1995-05-03 |
| Correct2 |     3105 |       Ciaran |    Delgado |            strip |  1995-11-03 |
| Correct2 |     3206 |       Lionel |    Stanley |          reflect |  1995-02-03 |
| Correct2 |     3317 |        Ethan |       Rice |              bay |  1995-06-03 |
| Correct2 |     3534 |         Jack |      Vance |         security |  1995-04-03 |
| Correct2 |     3654 |         Elmo |      Smith |              sum |  1995-01-03 |
| Correct2 |     3881 |     Michelle |      Watts |            night |  1995-11-03 |
| Correct2 |     4533 |         Otto |    Hopkins |           appeal |  1995-06-03 |
| Correct2 |     4929 |       Carlos |   Harrison |             gree |  1995-02-03 |
| Correct2 |     5052 |        Hiram |      Nunez |            rumor |  1995-08-03 |
| Correct2 |     5148 |    Stephanie |    Russell |           expect |  1995-05-03 |
| Correct2 |     5240 |         Kato |      Gibbs |       appearance |  1995-06-03 |

    DECLARE @SearchWords NVARCHAR(MAX) = 'li'
    DECLARE @LowerDate DATE = NULL
    DECLARE @UpperDate DATE = NULL

SELECT
    'Suggest1',
    ClientID,
    FirstName,
    LastName,
    VerificationCode,
    DateOfBirth
FROM Clients c
WHERE EXISTS(
          SELECT *
          FROM SearchWordsTwo s
          WHERE (c.FirstName LIKE CONCAT('%',s.Word,'%'))
             OR (c.LastName LIKE CONCAT('%',s.Word,'%'))
             OR (c.VerificationCode LIKE CONCAT('%',s.Word,'%'))
        )
or (
     (@LowerDate IS NOT NULL AND DateOfBirth BETWEEN @LowerDate AND @UpperDate)
    )
|          | ClientID | FirstName | LastName | VerificationCode | DateOfBirth |
|----------|----------|-----------|----------|------------------|-------------|
| Suggest1 |     1506 |    George |  Coleman |       brilliance |  1995-06-03 |
| Suggest1 |     2600 |      Lisa |  Stanley |             rice |  1995-06-03 |
| Suggest1 |     2984 |    Lionel |     Knox |       disappoint |  1995-05-03 |
| Suggest1 |     3206 |    Lionel |  Stanley |          reflect |  1995-02-03 |
-- -------------------------------------------
     --works correctly with an AND for DateOfBirth
    DECLARE @SearchWords NVARCHAR(MAX) = 'li'
    DECLARE @LowerDate DATE = NULL
    DECLARE @UpperDate DATE = NULL

SELECT
    'Correct1',
    ClientID,
    FirstName,
    LastName,
    VerificationCode,
    DateOfBirth
FROM Clients c
WHERE EXISTS(
          SELECT *
          FROM SearchWordsTwo s
          WHERE (c.FirstName LIKE CONCAT('%',s.Word,'%'))
             OR (c.LastName LIKE CONCAT('%',s.Word,'%'))
             OR (c.VerificationCode LIKE CONCAT('%',s.Word,'%'))
        )
  AND DateOfBirth BETWEEN ISNULL(@LowerDate,DateOfBirth) AND ISNULL(@UpperDate,DateOfBirth)
|          | ClientID | FirstName | LastName | VerificationCode | DateOfBirth |
|----------|----------|-----------|----------|------------------|-------------|
| Correct1 |     1506 |    George |  Coleman |       brilliance |  1995-06-03 |
| Correct1 |     2600 |      Lisa |  Stanley |             rice |  1995-06-03 |
| Correct1 |     2984 |    Lionel |     Knox |       disappoint |  1995-05-03 |
| Correct1 |     3206 |    Lionel |  Stanley |          reflect |  1995-02-03 |
-- -------------------------------------------

    DECLARE @SearchWords NVARCHAR(MAX) = '1995'
    DECLARE @LowerDate DATE = '01 Jan 1995'
    DECLARE @UpperDate DATE = '31 Dec 1995'

SELECT
    'Suggest2',
    ClientID,
    FirstName,
    LastName,
    VerificationCode,
    DateOfBirth
FROM Clients c
WHERE EXISTS(
          SELECT *
          FROM SearchWords s
          WHERE (c.FirstName LIKE CONCAT('%',s.Word,'%'))
             OR (c.LastName LIKE CONCAT('%',s.Word,'%'))
             OR (c.VerificationCode LIKE CONCAT('%',s.Word,'%'))
        )
or (
     (@LowerDate IS NOT NULL AND DateOfBirth BETWEEN @LowerDate AND @UpperDate)
    )
|          | ClientID |    FirstName |   LastName | VerificationCode | DateOfBirth |
|----------|----------|--------------|------------|------------------|-------------|
| Suggest2 |      206 | Richard 1995 |    Douglas |              bee |  1948-01-03 |
| Suggest2 |      404 |        thank | yourselves |           whattt |  1995-12-03 |
| Suggest2 |      670 |     Ida 1995 |    Delgado |             mild |  1995-02-03 |
| Suggest2 |     1506 |       George |    Coleman |       brilliance |  1995-06-03 |
| Suggest2 |     2384 |        Lewis |       Rice |       instrument |  1995-04-03 |
| Suggest2 |     2600 |         Lisa |    Stanley |             rice |  1995-06-03 |
| Suggest2 |     2974 |      Hammett |    Hopkins |          snuggle |  1995-05-03 |
| Suggest2 |     2984 |       Lionel |       Knox |       disappoint |  1995-05-03 |
| Suggest2 |     3105 |       Ciaran |    Delgado |            strip |  1995-11-03 |
| Suggest2 |     3206 |       Lionel |    Stanley |          reflect |  1995-02-03 |
| Suggest2 |     3317 |        Ethan |       Rice |              bay |  1995-06-03 |
| Suggest2 |     3534 |         Jack |      Vance |         security |  1995-04-03 |
| Suggest2 |     3654 |         Elmo |      Smith |              sum |  1995-01-03 |
| Suggest2 |     3881 |     Michelle |      Watts |            night |  1995-11-03 |
| Suggest2 |     4533 |         Otto |    Hopkins |           appeal |  1995-06-03 |
| Suggest2 |     4929 |       Carlos |   Harrison |             gree |  1995-02-03 |
| Suggest2 |     5052 |        Hiram |      Nunez |            rumor |  1995-08-03 |
| Suggest2 |     5148 |    Stephanie |    Russell |           expect |  1995-05-03 |
| Suggest2 |     5240 |         Kato |      Gibbs |       appearance |  1995-06-03 |
-- -------------------------------------------

   --works correctly with an OR for DateOfBirth
    DECLARE @SearchWords NVARCHAR(MAX) = '1995'
    DECLARE @LowerDate DATE = '01 Jan 1995'
    DECLARE @UpperDate DATE = '31 Dec 1995'

SELECT
    'Correct2',
    ClientID,
    FirstName,
    LastName,
    VerificationCode,
    DateOfBirth
FROM Clients c
WHERE EXISTS(
          SELECT *
          FROM SearchWords s
          WHERE (c.FirstName LIKE CONCAT('%',s.Word,'%'))
             OR (c.LastName LIKE CONCAT('%',s.Word,'%'))
             OR (c.VerificationCode LIKE CONCAT('%',s.Word,'%'))
        )
  OR DateOfBirth BETWEEN ISNULL(@LowerDate,DateOfBirth) AND ISNULL(@UpperDate,DateOfBirth)
|          | ClientID |    FirstName |   LastName | VerificationCode | DateOfBirth |
|----------|----------|--------------|------------|------------------|-------------|
| Correct2 |      206 | Richard 1995 |    Douglas |              bee |  1948-01-03 |
| Correct2 |      404 |        thank | yourselves |           whattt |  1995-12-03 |
| Correct2 |      670 |     Ida 1995 |    Delgado |             mild |  1995-02-03 |
| Correct2 |     1506 |       George |    Coleman |       brilliance |  1995-06-03 |
| Correct2 |     2384 |        Lewis |       Rice |       instrument |  1995-04-03 |
| Correct2 |     2600 |         Lisa |    Stanley |             rice |  1995-06-03 |
| Correct2 |     2974 |      Hammett |    Hopkins |          snuggle |  1995-05-03 |
| Correct2 |     2984 |       Lionel |       Knox |       disappoint |  1995-05-03 |
| Correct2 |     3105 |       Ciaran |    Delgado |            strip |  1995-11-03 |
| Correct2 |     3206 |       Lionel |    Stanley |          reflect |  1995-02-03 |
| Correct2 |     3317 |        Ethan |       Rice |              bay |  1995-06-03 |
| Correct2 |     3534 |         Jack |      Vance |         security |  1995-04-03 |
| Correct2 |     3654 |         Elmo |      Smith |              sum |  1995-01-03 |
| Correct2 |     3881 |     Michelle |      Watts |            night |  1995-11-03 |
| Correct2 |     4533 |         Otto |    Hopkins |           appeal |  1995-06-03 |
| Correct2 |     4929 |       Carlos |   Harrison |             gree |  1995-02-03 |
| Correct2 |     5052 |        Hiram |      Nunez |            rumor |  1995-08-03 |
| Correct2 |     5148 |    Stephanie |    Russell |           expect |  1995-05-03 |
| Correct2 |     5240 |         Kato |      Gibbs |       appearance |  1995-06-03 |
查询4

    DECLARE @SearchWords NVARCHAR(MAX) = 'li'
    DECLARE @LowerDate DATE = NULL
    DECLARE @UpperDate DATE = NULL

SELECT
    'Suggest1',
    ClientID,
    FirstName,
    LastName,
    VerificationCode,
    DateOfBirth
FROM Clients c
WHERE EXISTS(
          SELECT *
          FROM SearchWordsTwo s
          WHERE (c.FirstName LIKE CONCAT('%',s.Word,'%'))
             OR (c.LastName LIKE CONCAT('%',s.Word,'%'))
             OR (c.VerificationCode LIKE CONCAT('%',s.Word,'%'))
        )
or (
     (@LowerDate IS NOT NULL AND DateOfBirth BETWEEN @LowerDate AND @UpperDate)
    )
|          | ClientID | FirstName | LastName | VerificationCode | DateOfBirth |
|----------|----------|-----------|----------|------------------|-------------|
| Suggest1 |     1506 |    George |  Coleman |       brilliance |  1995-06-03 |
| Suggest1 |     2600 |      Lisa |  Stanley |             rice |  1995-06-03 |
| Suggest1 |     2984 |    Lionel |     Knox |       disappoint |  1995-05-03 |
| Suggest1 |     3206 |    Lionel |  Stanley |          reflect |  1995-02-03 |
-- -------------------------------------------
     --works correctly with an AND for DateOfBirth
    DECLARE @SearchWords NVARCHAR(MAX) = 'li'
    DECLARE @LowerDate DATE = NULL
    DECLARE @UpperDate DATE = NULL

SELECT
    'Correct1',
    ClientID,
    FirstName,
    LastName,
    VerificationCode,
    DateOfBirth
FROM Clients c
WHERE EXISTS(
          SELECT *
          FROM SearchWordsTwo s
          WHERE (c.FirstName LIKE CONCAT('%',s.Word,'%'))
             OR (c.LastName LIKE CONCAT('%',s.Word,'%'))
             OR (c.VerificationCode LIKE CONCAT('%',s.Word,'%'))
        )
  AND DateOfBirth BETWEEN ISNULL(@LowerDate,DateOfBirth) AND ISNULL(@UpperDate,DateOfBirth)
|          | ClientID | FirstName | LastName | VerificationCode | DateOfBirth |
|----------|----------|-----------|----------|------------------|-------------|
| Correct1 |     1506 |    George |  Coleman |       brilliance |  1995-06-03 |
| Correct1 |     2600 |      Lisa |  Stanley |             rice |  1995-06-03 |
| Correct1 |     2984 |    Lionel |     Knox |       disappoint |  1995-05-03 |
| Correct1 |     3206 |    Lionel |  Stanley |          reflect |  1995-02-03 |
-- -------------------------------------------

    DECLARE @SearchWords NVARCHAR(MAX) = '1995'
    DECLARE @LowerDate DATE = '01 Jan 1995'
    DECLARE @UpperDate DATE = '31 Dec 1995'

SELECT
    'Suggest2',
    ClientID,
    FirstName,
    LastName,
    VerificationCode,
    DateOfBirth
FROM Clients c
WHERE EXISTS(
          SELECT *
          FROM SearchWords s
          WHERE (c.FirstName LIKE CONCAT('%',s.Word,'%'))
             OR (c.LastName LIKE CONCAT('%',s.Word,'%'))
             OR (c.VerificationCode LIKE CONCAT('%',s.Word,'%'))
        )
or (
     (@LowerDate IS NOT NULL AND DateOfBirth BETWEEN @LowerDate AND @UpperDate)
    )
|          | ClientID |    FirstName |   LastName | VerificationCode | DateOfBirth |
|----------|----------|--------------|------------|------------------|-------------|
| Suggest2 |      206 | Richard 1995 |    Douglas |              bee |  1948-01-03 |
| Suggest2 |      404 |        thank | yourselves |           whattt |  1995-12-03 |
| Suggest2 |      670 |     Ida 1995 |    Delgado |             mild |  1995-02-03 |
| Suggest2 |     1506 |       George |    Coleman |       brilliance |  1995-06-03 |
| Suggest2 |     2384 |        Lewis |       Rice |       instrument |  1995-04-03 |
| Suggest2 |     2600 |         Lisa |    Stanley |             rice |  1995-06-03 |
| Suggest2 |     2974 |      Hammett |    Hopkins |          snuggle |  1995-05-03 |
| Suggest2 |     2984 |       Lionel |       Knox |       disappoint |  1995-05-03 |
| Suggest2 |     3105 |       Ciaran |    Delgado |            strip |  1995-11-03 |
| Suggest2 |     3206 |       Lionel |    Stanley |          reflect |  1995-02-03 |
| Suggest2 |     3317 |        Ethan |       Rice |              bay |  1995-06-03 |
| Suggest2 |     3534 |         Jack |      Vance |         security |  1995-04-03 |
| Suggest2 |     3654 |         Elmo |      Smith |              sum |  1995-01-03 |
| Suggest2 |     3881 |     Michelle |      Watts |            night |  1995-11-03 |
| Suggest2 |     4533 |         Otto |    Hopkins |           appeal |  1995-06-03 |
| Suggest2 |     4929 |       Carlos |   Harrison |             gree |  1995-02-03 |
| Suggest2 |     5052 |        Hiram |      Nunez |            rumor |  1995-08-03 |
| Suggest2 |     5148 |    Stephanie |    Russell |           expect |  1995-05-03 |
| Suggest2 |     5240 |         Kato |      Gibbs |       appearance |  1995-06-03 |
-- -------------------------------------------

   --works correctly with an OR for DateOfBirth
    DECLARE @SearchWords NVARCHAR(MAX) = '1995'
    DECLARE @LowerDate DATE = '01 Jan 1995'
    DECLARE @UpperDate DATE = '31 Dec 1995'

SELECT
    'Correct2',
    ClientID,
    FirstName,
    LastName,
    VerificationCode,
    DateOfBirth
FROM Clients c
WHERE EXISTS(
          SELECT *
          FROM SearchWords s
          WHERE (c.FirstName LIKE CONCAT('%',s.Word,'%'))
             OR (c.LastName LIKE CONCAT('%',s.Word,'%'))
             OR (c.VerificationCode LIKE CONCAT('%',s.Word,'%'))
        )
  OR DateOfBirth BETWEEN ISNULL(@LowerDate,DateOfBirth) AND ISNULL(@UpperDate,DateOfBirth)
|          | ClientID |    FirstName |   LastName | VerificationCode | DateOfBirth |
|----------|----------|--------------|------------|------------------|-------------|
| Correct2 |      206 | Richard 1995 |    Douglas |              bee |  1948-01-03 |
| Correct2 |      404 |        thank | yourselves |           whattt |  1995-12-03 |
| Correct2 |      670 |     Ida 1995 |    Delgado |             mild |  1995-02-03 |
| Correct2 |     1506 |       George |    Coleman |       brilliance |  1995-06-03 |
| Correct2 |     2384 |        Lewis |       Rice |       instrument |  1995-04-03 |
| Correct2 |     2600 |         Lisa |    Stanley |             rice |  1995-06-03 |
| Correct2 |     2974 |      Hammett |    Hopkins |          snuggle |  1995-05-03 |
| Correct2 |     2984 |       Lionel |       Knox |       disappoint |  1995-05-03 |
| Correct2 |     3105 |       Ciaran |    Delgado |            strip |  1995-11-03 |
| Correct2 |     3206 |       Lionel |    Stanley |          reflect |  1995-02-03 |
| Correct2 |     3317 |        Ethan |       Rice |              bay |  1995-06-03 |
| Correct2 |     3534 |         Jack |      Vance |         security |  1995-04-03 |
| Correct2 |     3654 |         Elmo |      Smith |              sum |  1995-01-03 |
| Correct2 |     3881 |     Michelle |      Watts |            night |  1995-11-03 |
| Correct2 |     4533 |         Otto |    Hopkins |           appeal |  1995-06-03 |
| Correct2 |     4929 |       Carlos |   Harrison |             gree |  1995-02-03 |
| Correct2 |     5052 |        Hiram |      Nunez |            rumor |  1995-08-03 |
| Correct2 |     5148 |    Stephanie |    Russell |           expect |  1995-05-03 |
| Correct2 |     5240 |         Kato |      Gibbs |       appearance |  1995-06-03 |

    DECLARE @SearchWords NVARCHAR(MAX) = 'li'
    DECLARE @LowerDate DATE = NULL
    DECLARE @UpperDate DATE = NULL

SELECT
    'Suggest1',
    ClientID,
    FirstName,
    LastName,
    VerificationCode,
    DateOfBirth
FROM Clients c
WHERE EXISTS(
          SELECT *
          FROM SearchWordsTwo s
          WHERE (c.FirstName LIKE CONCAT('%',s.Word,'%'))
             OR (c.LastName LIKE CONCAT('%',s.Word,'%'))
             OR (c.VerificationCode LIKE CONCAT('%',s.Word,'%'))
        )
or (
     (@LowerDate IS NOT NULL AND DateOfBirth BETWEEN @LowerDate AND @UpperDate)
    )
|          | ClientID | FirstName | LastName | VerificationCode | DateOfBirth |
|----------|----------|-----------|----------|------------------|-------------|
| Suggest1 |     1506 |    George |  Coleman |       brilliance |  1995-06-03 |
| Suggest1 |     2600 |      Lisa |  Stanley |             rice |  1995-06-03 |
| Suggest1 |     2984 |    Lionel |     Knox |       disappoint |  1995-05-03 |
| Suggest1 |     3206 |    Lionel |  Stanley |          reflect |  1995-02-03 |
-- -------------------------------------------
     --works correctly with an AND for DateOfBirth
    DECLARE @SearchWords NVARCHAR(MAX) = 'li'
    DECLARE @LowerDate DATE = NULL
    DECLARE @UpperDate DATE = NULL

SELECT
    'Correct1',
    ClientID,
    FirstName,
    LastName,
    VerificationCode,
    DateOfBirth
FROM Clients c
WHERE EXISTS(
          SELECT *
          FROM SearchWordsTwo s
          WHERE (c.FirstName LIKE CONCAT('%',s.Word,'%'))
             OR (c.LastName LIKE CONCAT('%',s.Word,'%'))
             OR (c.VerificationCode LIKE CONCAT('%',s.Word,'%'))
        )
  AND DateOfBirth BETWEEN ISNULL(@LowerDate,DateOfBirth) AND ISNULL(@UpperDate,DateOfBirth)
|          | ClientID | FirstName | LastName | VerificationCode | DateOfBirth |
|----------|----------|-----------|----------|------------------|-------------|
| Correct1 |     1506 |    George |  Coleman |       brilliance |  1995-06-03 |
| Correct1 |     2600 |      Lisa |  Stanley |             rice |  1995-06-03 |
| Correct1 |     2984 |    Lionel |     Knox |       disappoint |  1995-05-03 |
| Correct1 |     3206 |    Lionel |  Stanley |          reflect |  1995-02-03 |
-- -------------------------------------------

    DECLARE @SearchWords NVARCHAR(MAX) = '1995'
    DECLARE @LowerDate DATE = '01 Jan 1995'
    DECLARE @UpperDate DATE = '31 Dec 1995'

SELECT
    'Suggest2',
    ClientID,
    FirstName,
    LastName,
    VerificationCode,
    DateOfBirth
FROM Clients c
WHERE EXISTS(
          SELECT *
          FROM SearchWords s
          WHERE (c.FirstName LIKE CONCAT('%',s.Word,'%'))
             OR (c.LastName LIKE CONCAT('%',s.Word,'%'))
             OR (c.VerificationCode LIKE CONCAT('%',s.Word,'%'))
        )
or (
     (@LowerDate IS NOT NULL AND DateOfBirth BETWEEN @LowerDate AND @UpperDate)
    )
|          | ClientID |    FirstName |   LastName | VerificationCode | DateOfBirth |
|----------|----------|--------------|------------|------------------|-------------|
| Suggest2 |      206 | Richard 1995 |    Douglas |              bee |  1948-01-03 |
| Suggest2 |      404 |        thank | yourselves |           whattt |  1995-12-03 |
| Suggest2 |      670 |     Ida 1995 |    Delgado |             mild |  1995-02-03 |
| Suggest2 |     1506 |       George |    Coleman |       brilliance |  1995-06-03 |
| Suggest2 |     2384 |        Lewis |       Rice |       instrument |  1995-04-03 |
| Suggest2 |     2600 |         Lisa |    Stanley |             rice |  1995-06-03 |
| Suggest2 |     2974 |      Hammett |    Hopkins |          snuggle |  1995-05-03 |
| Suggest2 |     2984 |       Lionel |       Knox |       disappoint |  1995-05-03 |
| Suggest2 |     3105 |       Ciaran |    Delgado |            strip |  1995-11-03 |
| Suggest2 |     3206 |       Lionel |    Stanley |          reflect |  1995-02-03 |
| Suggest2 |     3317 |        Ethan |       Rice |              bay |  1995-06-03 |
| Suggest2 |     3534 |         Jack |      Vance |         security |  1995-04-03 |
| Suggest2 |     3654 |         Elmo |      Smith |              sum |  1995-01-03 |
| Suggest2 |     3881 |     Michelle |      Watts |            night |  1995-11-03 |
| Suggest2 |     4533 |         Otto |    Hopkins |           appeal |  1995-06-03 |
| Suggest2 |     4929 |       Carlos |   Harrison |             gree |  1995-02-03 |
| Suggest2 |     5052 |        Hiram |      Nunez |            rumor |  1995-08-03 |
| Suggest2 |     5148 |    Stephanie |    Russell |           expect |  1995-05-03 |
| Suggest2 |     5240 |         Kato |      Gibbs |       appearance |  1995-06-03 |
-- -------------------------------------------

   --works correctly with an OR for DateOfBirth
    DECLARE @SearchWords NVARCHAR(MAX) = '1995'
    DECLARE @LowerDate DATE = '01 Jan 1995'
    DECLARE @UpperDate DATE = '31 Dec 1995'

SELECT
    'Correct2',
    ClientID,
    FirstName,
    LastName,
    VerificationCode,
    DateOfBirth
FROM Clients c
WHERE EXISTS(
          SELECT *
          FROM SearchWords s
          WHERE (c.FirstName LIKE CONCAT('%',s.Word,'%'))
             OR (c.LastName LIKE CONCAT('%',s.Word,'%'))
             OR (c.VerificationCode LIKE CONCAT('%',s.Word,'%'))
        )
  OR DateOfBirth BETWEEN ISNULL(@LowerDate,DateOfBirth) AND ISNULL(@UpperDate,DateOfBirth)
|          | ClientID |    FirstName |   LastName | VerificationCode | DateOfBirth |
|----------|----------|--------------|------------|------------------|-------------|
| Correct2 |      206 | Richard 1995 |    Douglas |              bee |  1948-01-03 |
| Correct2 |      404 |        thank | yourselves |           whattt |  1995-12-03 |
| Correct2 |      670 |     Ida 1995 |    Delgado |             mild |  1995-02-03 |
| Correct2 |     1506 |       George |    Coleman |       brilliance |  1995-06-03 |
| Correct2 |     2384 |        Lewis |       Rice |       instrument |  1995-04-03 |
| Correct2 |     2600 |         Lisa |    Stanley |             rice |  1995-06-03 |
| Correct2 |     2974 |      Hammett |    Hopkins |          snuggle |  1995-05-03 |
| Correct2 |     2984 |       Lionel |       Knox |       disappoint |  1995-05-03 |
| Correct2 |     3105 |       Ciaran |    Delgado |            strip |  1995-11-03 |
| Correct2 |     3206 |       Lionel |    Stanley |          reflect |  1995-02-03 |
| Correct2 |     3317 |        Ethan |       Rice |              bay |  1995-06-03 |
| Correct2 |     3534 |         Jack |      Vance |         security |  1995-04-03 |
| Correct2 |     3654 |         Elmo |      Smith |              sum |  1995-01-03 |
| Correct2 |     3881 |     Michelle |      Watts |            night |  1995-11-03 |
| Correct2 |     4533 |         Otto |    Hopkins |           appeal |  1995-06-03 |
| Correct2 |     4929 |       Carlos |   Harrison |             gree |  1995-02-03 |
| Correct2 |     5052 |        Hiram |      Nunez |            rumor |  1995-08-03 |
| Correct2 |     5148 |    Stephanie |    Russell |           expect |  1995-05-03 |
| Correct2 |     5240 |         Kato |      Gibbs |       appearance |  1995-06-03 |

谢谢,但对于第一组参数不起作用。它如何“不起作用”?烟雾从屏幕上散发出来吗?您没有提供测试用例,那么我怎么知道您在说什么?您是否考虑过nvarchar值N'1995'可能是“不工作”源?(也就是说,如果你完全忽略了生日,你会从搜索词N'1995'中得到结果吗?)。样本数据肯定会有帮助的哈哈哈谢谢你的笑声。烟雾并没有从屏幕上完全散发出来,但离屏幕很近;)我想我的问题是在你的第一句话中,你有“和@LowerDate和@UpperDate之间的DateOfBirth”,因为除了查询的Word组件外,它根本不会返回结果。如果没有测试数据,我们可能会花24小时交换消息而一无所获,只有你有测试数据(到目前为止,提示)>43Mb的“样本”数据?那太慷慨了,但恐怕我没有时间处理那么多。“样本”的概念是小的。事实上,你可能想考虑抱歉,我会减少它。现在应该更好地描述问题。(感谢SQLfiddle。)感谢@Used_By_,这似乎是匹配的,但是你能理解为什么在SQLfiddle上第三个查询显示richard1995,而该记录和其他记录不匹配任何条件吗?如果这应该是另一个问题,让我知道,因为我知道它最初没有提到。测试您的语句,如果我将“or”改为“and”,它将得到正确的结果,因此返回到我的结果的原始问题。