簡體   English   中英

SQL 服務器查詢中的 Like 語句未返回所有結果

[英]Like statement in SQL Server query not returning all results

我有一個數據庫表,其中有一列類型為nvarchar(max) ,值為 '17KAAKSPN13'

使用像 '%17KA%' 這樣的 testcolumn 查詢表時,不會返回任何結果。 如果我使用 '%17KAA%' 進行查詢,我會得到一個結果。

要對此進行測試,請創建一個簡單的表並執行以下查詢,然后查看第二個查詢沒有返回任何結果:

更新:服務器排序規則:Danish_Norwegian_CI_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%'

結果:使用like查詢時沒有返回結果

編輯:

是它不起作用的示例。 我將其添加為編輯,因為有很多評論和兩個不合適的小提琴。 這個問題似乎與整理有關。

來自這里 - https://stackoverflow.com/a/53802337/13927312

嘗試看看在您的模式之前添加 N(將其標記為 Unicode)是否有任何區別。 它可能無法解釋這種行為,但可以解決您的問題。

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

您可以將 COLLATE 子句的 go 轉換為排序規則,這使得LIKE可以解決。

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

來自 MSDN 上的整理

字符文字和變量被分配了當前數據庫的默認排序規則。 列引用被分配列的定義排序規則。

我認為問題在於在挪威語和丹麥語中,“AA”與“A”是不同的字符。 因此,您不能僅將其搜索為“A”。

原因是“AA”是代表Å的一種方式。

因此,您的代碼工作正常。 您可以轉換為不同的排序規則,其中'AA'只是'A'跟在'A'之后。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM