就我而言,我的病人表有几列,包括病人的名字和姓氏。使用此表的应用程序具有带有名字和姓氏的患者搜索功能。
表中的某些测试数据的姓氏以连续的'a'的几个字母结尾,如下图所示
因此,当我在简单查询下运行时,它会产生一些奇怪的结果
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。知道为什么会发生这种奇怪的行为吗?
答案 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
,您将获得所看到的行为。