我的猜测:search_term
是 aCHAR/NCHAR
并且有尾随空格(或出于其他原因正在考虑尾随空格)。尝试:
WHERE RTRIM(search_term) = 'b';
您可能还需要消除不受修剪操作影响的制表符/回车符。
WHERE LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(search_term,
CHAR(9), ''), CHAR(10), ''), CHAR(13), ''))) = 'b';
请注意,上述两个查询都禁止使用索引,因此如果有索引,search_term
您可能应该在将列更改为varchar
ornvarchar
并确保填充设置和空格不会导致问题后重建它。
其他猜测:正如@Dems 指出的那样,检查第一个查询中两列的长度。还尝试将您的 where 子句更改为以下内容,仅用于调查目的:
WHERE search_term LIKE 'b%'
AND LEN(search_term) > 1;
如果你在那里得到任何结果,那么你可以说:
DECLARE @val VARCHAR(100), @i INT;
DECLARE c CURSOR LOCAL STATIC READ_ONLY FAST_FORWARD
FOR SELECT search_term FROM dbo.search_term_suggest
WHERE search_term LIKE 'b%'
AND LEN(search_term) > 1;
OPEN c;
FETCH NEXT FROM c INTO @val;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @i = 1;
PRINT '-----' + @val + ' (' + RTRIM(LEN(@val)) + ')';
WHILE @i <= LEN(@val)
BEGIN
PRINT SUBSTRING(@val, @i, 1) + ' = ' + ASCII(SUBSTRING(@val, @i, 1));
SET @i = @i + 1;
END
FETCH NEXT FROM c INTO @val;
END
CLOSE c;
DEALLOCATE c;
这将帮助您解决该列中的内容,除了b
- 它可能是您尚未检查的空格(例如制表符或回车)或其他非打印字符。