2012-01-25 66 views
0

我正在使用SSMS 2008,並正在尋找一種方法來根據以下邏輯來替換記錄。我希望從問號之前出現的一列中列出所有內容。例如當前列數據:如何編寫TSQL替換函數來替換第一個表達式?

SUICIDAL? If yes, please describe 
HOMICIDAL? If yes, please describe the following 
PSYCHOTIC BEHAVIOR? If yes, please describe. If no then? 
... 

我想這不是閱讀:

SUICIDAL? 
HOMICIDAL? 
PSYCHOTIC BEHAVIOR? 
... 

注意,它應該只包括第一個問號之前的一切,所以在第三個記錄應該只返回「精神病行爲「,而不是以」當時「結尾的一切。

我該如何編碼?我想下面的表達式中TSQL但這絲毫不起作用:

replace('?%',[test_details].[test_setup_details_caption],'?') 

回答

2

TRY:

DECLARE @x varchar(100) = 'PSYCHOTIC BEHAVIOR? If yes, please describe. If no then?' 

SELECT LEFT(@x,CHARINDEX('?',@x)-1) 
+0

謝謝你們。我喜歡這個答案,因爲它更短。但是,而不是上述我需要刪除「-1」。所以它讀取:SELECT LEFT(@ x,CHARINDEX('?',@ x)) – salvationishere

2
UPDATE 
    MyTable 
SET 
    MyCol = LEFT(myCol, CHARINDEX('?', myCol)-1) 
WHERE 
    CHARINDEX('?', myCol) > 0; 

對於SELECT,只需使用

CASE 
    WHEN CHARINDEX('?', myCol) > 0 
      THEN LEFT(myCol, CHARINDEX('?', myCol)-1) 
    ELSE MyCol 
END