2013-06-05 56 views
6

当我使用此查询:SQL Server:为什么没有找到行?

SELECT TOP 20 
    f.name as f_firm_name 
FROM Firm f 
WHERE f.id_city = '73041' COLLATE SQL_Latin1_General_Cp1251_CI_AS 
ORDER BY f.name ASC 

我得到这些结果:

f_firm_name 
-------------------------------- 
SKY LINE STUDIO 
АНТИКВАРНЫЙ САЛОН 
БИЗОН УЛЬЯНОВСК 
ВЕРТЕКС ЗАО 
ВОЗРОЖДЕНИЕ+ 
ВОЛГАСПЕЦТЕХНОЛОГИИ 
ГП СЕРВИС 
Данилов А.Б.ИП 
ИНИКОМ 
ИП МАЛАШИН В.Б. 
ИП СУЛАГАЕВ АНДРЕЙ 

(20 row(s) affected) 

但是,如果使用此查询:

SELECT TOP 20 
    f.name as f_firm_name 
FROM Firm f 
WHERE f.id_city='73041' 
    AND f.name LIKE 'ВЕРТЕКС ЗАО%' COLLATE SQL_Latin1_General_Cp1251_CI_AS 
ORDER BY f.name ASC 

我得到这些结果:

f_firm_name 
----------------- 
(0 row(s) affected) 

为什么我在0 rows如果在第一个查询中获得f.name并使用该结果在第二个查询中搜索?

+2

'LIKEN'ВЕРТЕКСЗАО%''工作吗?如果是这样,数据库默认排序规则是什么?无论如何,这个列的数据类型是什么? –

+0

我使用SQL Server 2012获得了正确的结果。您的数据库使用哪种排序规则创建? –

回答

4

可能,f_firm_name中的第一个字符 - 是一个空格。

所以尝试这一个 -

SELECT TOP 20 f_firm_name = f.name 
FROM dbo.Firm f 
WHERE f.id_city = '73041' 
    AND LTRIM(f.name) LIKE 'ВЕРТЕКС ЗАО%' --<-- 
     COLLATE SQL_Latin1_General_Cp1251_CI_AS 
ORDER BY f.name 
1

可能是你的数据库的默认排序规则不支持的字符串文字中的字符,他们正在丧失。

在我的默认排序规则SELECT 'ВЕРТЕКС ЗАО'回报??????? ???

如果列nvarchar使用LIKE N'ВЕРТЕКС ЗАО%'

如果varchar使用

LIKE CAST(N'ВЕРТЕКС ЗАО%' COLLATE SQL_Latin1_General_Cp1251_CI_AS AS VARCHAR(50)) 

,因为这可以防止隐式转换,是优化搜索。

+0

column varchar,LIKE CAST查询(N'ВЕРТЕКСЗАО%COLLATE SQL_Latin1_General_Cp1251_CI_AS AS VARCHAR(50))'不起作用...在结果我得到0行 –

相关问题