如何编写TSQL替换函数来替换第一个表达式?

时间:2012-01-25 19:58:25

标签: sql tsql

我正在使用SSMS 2008,正在寻找一种根据以下逻辑替换记录的方法。我想要在问号之前出现的一列中列出的所有内容。示例当前列数据:

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?
...

请注意,它应该只包括FIRST问号之前的所有内容,所以在第三个记录中它应该只返回“PSYCHOTIC BEHAVIOR”而不是以“then”结尾的所有内容。

我该如何编码?我在TSQL中尝试了以下表达式,但这不起作用:

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

TRY:

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

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