2017-04-19 104 views
0

我想检索这个列值的第二个字,但它显示空白。

我的查询是:Sql查询结果问题

select ltrim(
    substring(companyname, 
    charindex(' ',companyname), 
    CHARINDEX(
    ' ', 
    ltrim(
     SUBSTRING(
     companyname, 
     charindex(' ',companyname), 
     LEN(companyname) - charindex(' ',companyname)) 
    ) 
    ) 
) 
) 
from pmweb_companies 
where companyname = '7x24 Exchange' 

结果应该返回:交易所 但它显示空白。

+0

什么是列'companyname'的类型? – Hybris95

+0

列公司名称的数据类型为nvarchar –

+0

某些样本数据如何? –

回答

0

这是因为该查询要求总词数超过两个,这意味着在分析的字符串中至少需要两个空格。

如果要排除的第一个字和得到的第二个字什么,你可以使用类似这样

select ltrim(
     substring(
      companyname, 
      charindex(' ', companyname), 
      len(companyname) - charindex(' ', companyname) + 1 
     ) 
     ); 

如果你想要的是第二个字来代替,就可以破解您查询到这个

select ltrim(
    substring(companyname, 
    charindex(' ', companyname), 
    CHARINDEX(
    ' ', 
    ltrim(
     SUBSTRING(
     companyname + ' fake', 
     charindex(' ', companyname), 
     LEN(companyname + ' fake') - charindex(' ', companyname)) 
    ) 
    ) 
) 
) 
from pmweb_companies 
where companyname = '7x24 Exchange' 

编辑

如果我正确理解你的评论,如果字符串只有一个字,该查询应该返回空白。如果是这样的话,你可以使用一个case语句进行select

select case 
      when charindex(
       ' ', 
       substring(
        companyname, 
        charindex(' ', companyname), 
        LEN(companyname) - charindex(' ', companyname) + 1 
       ) 
       ) = 0 /* this means there's less than two words */ 
      then '' /* you can place something else here, as you prefer */ 
      else 
      ltrim(
       substring(companyname, 
       charindex(' ', companyname), 
       CHARINDEX(
       ' ', 
       ltrim(
        SUBSTRING(
        companyname + ' fake', 
        charindex(' ', companyname), 
        LEN(companyname + ' fake') - charindex(' ', companyname)) 
       ) 
       ) 
      ) 
      ) 
      end 
from pmweb_companies 
where companyname = '7x24 Exchange' 
+0

如果第一个单词不完全是4个字符,则您发布的第一个查询不起作用。 –

+0

@SeanLange你说得对,那是一个测试中的错字......谢谢! –

+0

很高兴帮助!如果这个或任何答案已解决您的问题,请点击复选标记考虑[接受它](http://meta.stackexchange.com/q/5234/179419)。这向更广泛的社区表明,您已经找到了解决方案,并为答复者和您自己提供了一些声誉。没有义务这样做。 –