sql server查询中的like语句未返回所有结果

b1payxdu  于 2021-07-26  发布在  Java
关注(0)|答案(3)|浏览(501)

我有一个数据库表,其列类型为 nvarchar(max) 和值'17kaakspn13'
使用testcolumn(如“%17ka%”)查询表时,不会返回任何结果。如果使用“%17kaa%”进行查询,则会得到一个结果。
要对此进行测试,请创建一个简单的表并执行以下查询,并确保第二个查询不会返回任何结果:
更新:服务器排序规则:丹麦语\u挪威语\u ci \u as

CREATE TABLE [dbo].testtable(
    testcolumn [nvarchar](max) NULL
) 

insert into [dbo].testtable (testcolumn) values('17KAAKSPN13')

SELECT * FROM [dbo].testtable 
SELECT * FROM [dbo].testtable WHERE testcolumn like '%17KA%'

结果:

编辑:
这是一个不起作用的例子。我添加这个作为编辑,因为有很多评论和两个不合适的小提琴。这个问题似乎与校勘有关。

5fjcxozz

5fjcxozz1#

从这里来-https://stackoverflow.com/a/53802337/13927312
试着看看在你的模式之前加n(标记为unicode)是否有什么不同。它可能无法解释这种行为,但可以解决你的问题。

SELECT * FROM [dbo].testtable WHERE testcolumn like N'%17KA%'
iugsix8n

iugsix8n2#

您可以将collate子句转换为排序规则,这使得 LIKE 去锻炼。

SELECT * FROM [dbo].testtable WHERE testcolumn collate SQL_Latin1_General_CP1_CI_AS 
like '%17KA%' collate SQL_Latin1_General_CP1_CI_AS

从msdn到排序规则
字符文本和变量被指定为当前数据库的默认排序规则。列引用被指定了列的定义排序规则。

fivyi3re

fivyi3re3#

我认为问题在于,在挪威语和丹麦语中,“aa”与“a”是不同的字符。所以你不能把它当作“a”来搜索。
原因是“aa”是一种表达方式å.
因此,您的代码工作正常。可以转换为其他排序规则,其中 'AA' 只是 'A' 跟随 'A' .

相关问题