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”,它将得到正确的结果,因此返回到我的结果的原始问题。