具有aaa%的SQL LIKE运算符具有奇怪的行为

时间:2019-03-13 08:27:58

标签: sql sql-server

就我而言,我的病人表有几列,包括病人的名字和姓氏。使用此表的应用程序具有带有名字和姓氏的患者搜索功能。

表中的某些测试数据的姓氏以连续的'a'的几个字母结尾,如下图所示

enter image description here

因此,当我在简单查询下运行时,它会产生一些奇怪的结果

select * from A_Patient where Firstname like 'aaa%'- **0 Row**
select * from A_Patient where Firstname like 'aaaa%'- **7 Row**
select * from A_Patient where Firstname like 'aaaaa%'- **1 Row**
select * from A_Patient where Firstname like 'aaaaaa%' - **3 Row**
select * from A_Patient where Firstname like 'aaaaaaa%' - **0 Row**
select * from A_Patient where Firstname like 'aaaaaaaa%' - **3 Row**

因此,当'a'是偶数时,将得到所有结果。但是,当字符数为奇数时,仅当提取的字符数匹配时才返回。否则不返回任何内容。 我将字母“ a”更改为“ b”,并测试了“ c”,但未发现此行为。

列的DataType是nvarchar。知道为什么会发生这种奇怪的行为吗?

1 个答案:

答案 0 :(得分:4)

请参阅此测试用例:

DECLARE @TestTable TABLE
(
    id INT IDENTITY(1, 1)
,   LastName NVARCHAR(255) COLLATE Danish_Norwegian_CI_AS
)

INSERT @TestTable (LastName)
VALUES  (N'aa')
,       (N'aaa')
,       (N'aaaa')

SELECT  *
FROM    @TestTable AS TT
WHERE   TT.LastName LIKE N'aaa%' COLLATE Latin1_General_CI_AS

没有COLLATE Latin1_General_CI_AS,您将获得所看到的行为。