简体   繁体   English

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

[英]Select LIKE or CHARINDEX() function to find some special unicode characters with SQL

What wrong with my second and third query that did not output any record, while the first one outputs one record. 我的第二个和第三个查询没有输出任何记录,而第一个查询输出了一个记录又怎么了?

Query 1: 查询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 = '')
  • Result: 21 NGUYỄN THỊ DIỆU addieunt@gmail.com 结果:21NGUYỄNTHỊDIỆUaddieunt@gmail.com

Query 2: 查询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 @FULLNamelike OR @FULLNamelike = '')

Query 3: 查询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 (CHARINDEX(@FULLNamelike, HR_CInformation.[FullName]) > 0 OR @FULLNamelike = '')

It's because your unicode characters are converted into question marks. 这是因为您的Unicode字符会转换为问号。

Thus, indeed you need to use N when you declare and assign a unicode value to your variable FullName 因此,的确,在声明并将unicode值分配给变量FullName时确实需要使用N

Try this query to clarify: 尝试使用以下查询来澄清:

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: http://sqlfiddle.com/#!3/d41d8/40582 SQLFiddle: http ://sqlfiddle.com/#!3/d41d8/40582

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM