2017-09-19 69 views
0

搜索從表列在SQL Server中的字符串我有一個像下面如何使用CHARINDEX函數

1. "C-DERD,C-FDER,E-FDFE,E-DFE,C-DFERE" 
2. "E-FDFE,C-DFEC,E-DFDFE,E-DE" 

在表列字符串如果我搜索諸如「DE」的字符串,然後它會首先檢查所有以'C'開頭的單獨字符串如LIKE CONSTRAINT IN TABLE。如果找到了,那麼它將在單獨的列中返回TRUE,在第二種情況下,它不會在'C-'中找到,那麼它將檢查以'E-'開頭的所有單個字符串,但它與搜索字符串相同。僅使用CHARINDEX函數。

+2

修復您的數據結構,以便您不將列表存儲爲以逗號分隔的字符串。 –

+1

我不明白你爲什麼需要charindex。你可以使用'where%name%like'%DE%''。不要用特定的方法要求答案......這是[XY問題](http://xyproblem.info/)。相反,請描述問題和最終目標。 – scsimon

回答

2

正如我在評論中提到的,您應該修復數據結構。但是,有時候,我們被其他人的設計困擾,並且無法解決這些問題。

一種方法是拆分字符串,雖然這有點痛苦。你的情況,你可以這樣做:

select t.*, 
     (case when str like '%CE-DE%' then 1 
      when str like '%CE-[^,]DE%' then 1 
      when str like '%CE-[^,][^,]DE%' then 1 
      when str like '%CE-[^,][^,][^,]DE%' then 1 
      else 0 
     end) as flag 

這看起來對-DE,這足以滿足您的例子之間最多三個居間角色。

+0

謝謝@Gordon Linoff –