选择LIKE或CHARINDEX()函数以使用SQL查找一些特殊的unicode字符

选择LIKE或CHARINDEX()函数以使用SQL查找一些特殊的unicode字符,sql,sql-server,unicode,Sql,Sql Server,Unicode,我的第二个和第三个查询没有输出任何记录,而第一个查询输出一条记录,这有什么问题 查询1: DECLARE @FullName nvarchar(50) DECLARE @FULLNamelike nvarchar(50) SET @FullName = 'NGUYỄN THỊ DIỆU' SET @FULLNamelike = N'%' + @FullName + '%' SELECT HR_CInformation.[CandidateId] ,HR_CInformation.[Fu

我的第二个和第三个查询没有输出任何记录,而第一个查询输出一条记录,这有什么问题

查询1:

DECLARE @FullName nvarchar(50)
DECLARE @FULLNamelike nvarchar(50)
SET @FullName = 'NGUYỄN THỊ DIỆU'
SET @FULLNamelike = N'%' + @FullName + '%'

SELECT HR_CInformation.[CandidateId]
    ,HR_CInformation.[FullName]
    ,HR_CInformation.[Email]
FROM [dbo].[IT_HR_Candidate_Information] HR_CInformation
WHERE (HR_CInformation.[FullName] like N'%NGUYỄN THỊ DIỆU%' OR @FULLNamelike = '')
DECLARE @FullName nvarchar(50)
DECLARE @FULLNamelike nvarchar(50)
SET @FullName = 'NGUYỄN THỊ DIỆU'
SET @FULLNamelike = N'%' + @FullName + '%'

SELECT HR_CInformation.[CandidateId]
    ,HR_CInformation.[FullName]
    ,HR_CInformation.[Email]
FROM [dbo].[IT_HR_Candidate_Information] HR_CInformation
WHERE (HR_CInformation.[FullName] like @FULLNamelike OR @FULLNamelike = '')
DECLARE @FullName nvarchar(50)
DECLARE @FULLNamelike nvarchar(50)
SET @FullName = 'NGUYỄN THỊ DIỆU'
SET @FULLNamelike = N'%' + @FullName + '%'

SELECT HR_CInformation.[CandidateId]
    ,HR_CInformation.[FullName]
    ,HR_CInformation.[Email]
FROM [dbo].[IT_HR_Candidate_Information] HR_CInformation
WHERE (CHARINDEX(@FULLNamelike, HR_CInformation.[FullName]) > 0 OR @FULLNamelike = '')
  • 结果:21非圭亚那Ễ第N条Ị DIỆUaddieunt@gmail.com
查询2:

DECLARE @FullName nvarchar(50)
DECLARE @FULLNamelike nvarchar(50)
SET @FullName = 'NGUYỄN THỊ DIỆU'
SET @FULLNamelike = N'%' + @FullName + '%'

SELECT HR_CInformation.[CandidateId]
    ,HR_CInformation.[FullName]
    ,HR_CInformation.[Email]
FROM [dbo].[IT_HR_Candidate_Information] HR_CInformation
WHERE (HR_CInformation.[FullName] like N'%NGUYỄN THỊ DIỆU%' OR @FULLNamelike = '')
DECLARE @FullName nvarchar(50)
DECLARE @FULLNamelike nvarchar(50)
SET @FullName = 'NGUYỄN THỊ DIỆU'
SET @FULLNamelike = N'%' + @FullName + '%'

SELECT HR_CInformation.[CandidateId]
    ,HR_CInformation.[FullName]
    ,HR_CInformation.[Email]
FROM [dbo].[IT_HR_Candidate_Information] HR_CInformation
WHERE (HR_CInformation.[FullName] like @FULLNamelike OR @FULLNamelike = '')
DECLARE @FullName nvarchar(50)
DECLARE @FULLNamelike nvarchar(50)
SET @FullName = 'NGUYỄN THỊ DIỆU'
SET @FULLNamelike = N'%' + @FullName + '%'

SELECT HR_CInformation.[CandidateId]
    ,HR_CInformation.[FullName]
    ,HR_CInformation.[Email]
FROM [dbo].[IT_HR_Candidate_Information] HR_CInformation
WHERE (CHARINDEX(@FULLNamelike, HR_CInformation.[FullName]) > 0 OR @FULLNamelike = '')
查询3:

DECLARE @FullName nvarchar(50)
DECLARE @FULLNamelike nvarchar(50)
SET @FullName = 'NGUYỄN THỊ DIỆU'
SET @FULLNamelike = N'%' + @FullName + '%'

SELECT HR_CInformation.[CandidateId]
    ,HR_CInformation.[FullName]
    ,HR_CInformation.[Email]
FROM [dbo].[IT_HR_Candidate_Information] HR_CInformation
WHERE (HR_CInformation.[FullName] like N'%NGUYỄN THỊ DIỆU%' OR @FULLNamelike = '')
DECLARE @FullName nvarchar(50)
DECLARE @FULLNamelike nvarchar(50)
SET @FullName = 'NGUYỄN THỊ DIỆU'
SET @FULLNamelike = N'%' + @FullName + '%'

SELECT HR_CInformation.[CandidateId]
    ,HR_CInformation.[FullName]
    ,HR_CInformation.[Email]
FROM [dbo].[IT_HR_Candidate_Information] HR_CInformation
WHERE (HR_CInformation.[FullName] like @FULLNamelike OR @FULLNamelike = '')
DECLARE @FullName nvarchar(50)
DECLARE @FULLNamelike nvarchar(50)
SET @FullName = 'NGUYỄN THỊ DIỆU'
SET @FULLNamelike = N'%' + @FullName + '%'

SELECT HR_CInformation.[CandidateId]
    ,HR_CInformation.[FullName]
    ,HR_CInformation.[Email]
FROM [dbo].[IT_HR_Candidate_Information] HR_CInformation
WHERE (CHARINDEX(@FULLNamelike, HR_CInformation.[FullName]) > 0 OR @FULLNamelike = '')

这是因为您的unicode字符被转换为问号

因此,在声明变量
FullName
并为其分配unicode值时,确实需要使用
N

尝试此查询以澄清:

DECLARE @FullName nvarchar(50)
DECLARE @FullNameO nvarchar(50)
DECLARE @FullNamelike nvarchar(50)
DECLARE @FullNameOkay nvarchar(50)
SET @FullName = 'NGUYỄN THỊ DIỆU'
SET @FullNameO = N'NGUYỄN THỊ DIỆU'
SET @FullNamelike = N'%' + @FullName +'%'
SET @FullNameOkay = N'%' + @FullNameO +'%'
SELECT @FullNamelike, N'%NGUYỄN THỊ DIỆU%', @FullNameOkay
SQLFiddle: