Unicode T-SQL就像没有返回预期的所有记录一样

时间:2014-01-01 12:02:14

标签: sql sql-server tsql unicode

我在SQL Server 2008 R2中创建了一个数据库,并在MS Access 2003中创建了.adp文件格式的前端。此应用程序使用Devnagari Unicode字体作为数据库中的标签和数据。

后端有一个用于存储Unicode数据的表tblBookInfo

当我编写查询以查找从特定字符开始的所有记录时,它不会返回所有预期的记录。查询如下:

SELECT * 
FROM tblbookinfo info 
WHERE 
  (Language = 1) AND  
  (Type = 1) AND
  Author LIKE N'क%' 

它不返回起始字符为“कु”的记录。它返回起始字符为“क”,“कि”,“को”等的记录。

我得到“क”字符的Unicode,即0915和“कु”= 0941

如果我为Unicode字符编号循环'“कु”,我得到0915然后0941但是像''%''不会返回有“कु”的记录

3 个答案:

答案 0 :(得分:2)

在我的测试中,如果NVARCHAR数据类型与Indic_General_100_CI_AI归类一起使用,那么LIKE将返回所需的结果:

SELECT  *
FROM (
    SELECT N'क'  UNION ALL
    SELECT N'कु' UNION ALL
    SELECT N'how (strange!)'
) x (Author)
WHERE   x.Author    COLLATE Indic_General_100_CI_AI 
LIKE    N'क%'       COLLATE Indic_General_100_CI_AI 

输出:

Author
--------------
क
कु

答案 1 :(得分:0)

你能不能只使用OR运营商:

SELECT * 
FROM tblbookinfo info 
WHERE 
  (Language = 1) AND  
  (Type = 1) 
  AND
  (
    (Author LIKE N'क%') 
    OR 
    (Author LIKE N'"कु%') 
  )

答案 2 :(得分:0)

CREATE TABLE #TempTable (Author NVARCHAR(1000) COLLATE Indic_General_100_CI_AI)
GO

INSERT INTO #TempTable
VALUES (N'क'), (N'कि'), (N'को'), (N'कु')
GO

SELECT Author
FROM #TempTable
WHERE Author LIKE N'क%' 
GO

<强>结果

+--------+
| Author |
+--------+
| क      |
| कि     |
| को     |
| कु      |
+--------+