SQL Server字符串连接返回空白

时间:2013-06-02 18:47:02

标签: sql-server tsql

请帮我解决这个挑战。

此代码返回空白结果,我无法找出原因。

enter image description here

select Vendor_Name + ' || ' + cast(cnt as varchar(12)) as Vendor_Count
from (select top (1) Vendor_Name, count(Vendor_Name) as cnt 
      from dbo.Vendors nolock 
      group by Vendor_Name 
      having count(Vendor_Name)>1 
      order by 2 desc) x 

但是......内部查询返回 Vendor_Name空白,cnt 63420

enter image description here

select top (1) 
    Vendor_Name, count(Vendor_Name) as cnt 
from 
    dbo.Vendors nolock 
group by 
    Vendor_Name 
having 
    count(Vendor_Name) > 1 
order by 
    2 desc

这是没有top(1)的内部查询的结果。如您所见,blank / empty / null Vendor_Name最常出现。

enter image description here

我使用len()函数检查Vendor_name的长度,然后返回12.但是当我将上面的内部查询的结果复制到Excel工作表,并在Excel中使用len()函数时 - excel显示0。 SQL Server表中Vendor_name的声明长度为nvarchar(50)

我尝试isnull(Vendor_Name,'')COALESCE(Vendor_Name,''),但这没有任何区别。

我重新安排了查询并获得了非空白结果,这很有意思,但是我的原始查询没有。

select ' || ' + cast(cnt as varchar(12)) + ' ' + Vendor_Name  
from (select top (1) Vendor_Name, count(Vendor_Name) as cnt 
      from dbo.Vendors nolock 
      group by Vendor_Name 
      having count(Vendor_Name)>1 
      order by 2 desc) x 

但这个结果不是我想要的。

我错过了什么吗?

谢谢!

PS。 我试图复制数据到这里发布但没有成功。

1 个答案:

答案 0 :(得分:6)

这是一个真正的难题!

我怀疑Vendor_Name可能以NUL'\0')字符开头,表示字符串结束。这将使似乎没有内容并解释连接顺序的差异。

要对此进行测试,请在外部查询中尝试REPLACE(Vendor_Name, CHAR(0), ' ')