为什么我在查询中得到0结果(表中的一行有搜索词)?

时间:2014-01-29 14:13:31

标签: sql sql-server sql-server-2008

STRUCTURE TABLES AND SQL QUERY ON SQLFIDDLE

表价格:

name  id_firm  id_city  name
ООО   1429     73041    ПЕРЕВОЗКА ГРУЗА (ГРУЗОПЕРЕВОЗКА) АВТО 
ООО   1429     73041    ПЕРЕВОЗКА ГРУЗА (ГРУЗОПЕРЕВОЗКА) АВТО 
ООО   1429     73041    ПЕРЕВОЗКА ГРУЗА (ГРУЗОПЕРЕВОЗКА) АВТО 
ООО   1429     73041    ПЛИТКА КЕРАМИЧЕСКАЯ ГРАНИТ (КЕРАМОГРАНИТ) АССОРТ.
ООО   1429     73041    РАБОТЫ ГРУЗОПОДЪЕМНЫЕ АВТОВЫШКА (ПОДЪЕМНИК)
ООО   1429     73041    РАБОТЫ ГРУЗОПОДЪЕМНЫЕ АВТОКРАНОМ Г/П 25Т
ООО   1429     73041    РАБОТЫ КОМПРЕССОРОМ ВСЕ ВИДЫ
ООО   1429     73041    РАБОТЫ ПОГРУЗОЧНО-РАЗГРУЗОЧНЫЕ АВТОКРАНОМ-МАНИПУЛЯТОРОМ 

我使用查询:

SELECT * FROM (
SELECT  Row_Number()OVER(PARTITION BY f.name ORDER BY f.priority, d.end_date, p.datetime DESC) AS NameOrder, 
    p.id_price as p_id_price,
    p.id_service as p_id_service,
    p.name as p_name,
    p.name_original as p_name_original,
    p.id_producer_country as p_id_producer_country,
    p.id_firm as p_id_firm,
    p.unit as p_unit,
    f.name as f_name,
    f.priority as f_priority,
    f.address as f_address,
    f.phone as f_phone,
    city.name as city_name,
    pc.name as pc_name
FROM Price p
    left join Firm f on f.id_service = p.id_service AND f.id_city = p.id_city AND f.id_firm = p.id_firm
    left join City city on city.id_city = p.id_city
    left join Producer_country pc on pc.id_producer_country = p.id_producer_country
    left join Dogovor d on d.id_service=p.id_service AND d.id_city=p.id_city AND d.id_firm=p.id_firm
WHERE 
    p.name LIKE '%АВТОВЫШКА%'
)
AS S WHERE S.NameOrder = 1
ORDER BY S.f_priority DESC

但我得到0结果。

请告诉我,为什么我搜索АВТОВЫШК_ (%时,如果表格有行ООО 1429 73041 РАБОТЫ ГРУЗОПОДЪЕМНЫЕ АВТОВЫШКА (ПОДЪЕМНИК)

,我会得到0结果

为什么计算结果中的行数为0?

3 个答案:

答案 0 :(得分:1)

子句LIKE 'АВТОВЫШК %'表示当前行的该列的值必须该字符串开头。如果你想在字符串中匹配任何地方,你需要两端的“任意数量的字符”通配符:

LIKE '%АВТОВЫШК %'

答案 1 :(得分:0)

我猜你因为你的语言编码而将p.name存储为NVARCHAR(xx)数据类型。

您使用LIKE '%АВТОВЫШК %'传入的字符串实际上是VARCHAR,因此所有特殊字符都会丢失,因此字符串不匹配。

尝试像这样指定:

LIKE N'%АВТОВЫШК%'

将N添加到字符串的开头告诉SQL服务器它是一个unicode字符串,因此将保留特殊字符,然后您有更好的匹配机会。

答案 2 :(得分:0)

你写的是你的表是这样的:

表价格:

name  id_firm  id_city  name
ООО   1429     73041    ПЕРЕВОЗКА ГРУЗА (ГРУЗОПЕРЕВОЗКА) АВТО 
ООО   1429     73041    РАБОТЫ ГРУЗОПОДЪЕМНЫЕ АВТОВЫШКА (ПОДЪЕМНИК)
ООО   1429     73041    РАБОТЫ ГРУЗОПОДЪЕМНЫЕ АВТОКРАНОМ Г/П 25Т

正如您在此表中所见,您有两次名称名称的列 你确定第二列(在哪里使用)不是“name_original”吗?

你的选择看起来没问题,如果你在select和databas中都有正确的编码,
我没有看到任何问题。