Sql-Server

如何確定列中是否存在連字元 (-)

  • May 22, 2019

CASE表達式中,我試圖在文本列中搜尋以辨識連字元 (-):

CASE 
    WHEN SUBSTRING(al.ALT_ADDRESS,1,1) IN('1','5','7') 
     AND al.NEW_ADDRESS CONTAINS '-' 
    THEN CONCAT(al.ALT_ADDRESS,al.NEW_ADDRESS)

連字元可以位於列中的任何位置,因此我只需要知道它是否存在,而不管它實際上在列中的什麼位置。

我目前正在使用與@Josh 提供的完全相同的程式碼(LIKE '%-%'),但它不起作用,因為它不會為我知道它“應該”的幾個特定實例返回正確的數據。確切的文字ALT_ADDRESS是:“2754 Churchill Circle”。中的確切文本NEW_ADDRESS是:“O-89421”。但是,返回的結果不包括NEW_ADDRESS(O-89421)。

我已經確認 dash inNEW_ADDRESS確實與我正在使用的搜尋 (ASCII 45) 匹配。

現有答案的另一種方法是使用 CHARINDEX() 函式,如果存在則返回指定字元串的位置,否則返回 0。

select charindex('-','kevin-')

將返回 6,因為連字元位於字元串的第六位,與

select charindex('-','kevin')

返回 0,因為字元串中不存在“-”。


根據John Eisbrener 的建議,PATINDEX這也是一種選擇,它允許使用萬用字元——這在某些情況下可能會被證明是有益的。

引用自:https://dba.stackexchange.com/questions/238714