2017-04-19 103 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)。這向更廣泛的社區表明,您已經找到了解決方案,併爲答覆者和您自己提供了一些聲譽。沒有義務這樣做。 –