我正在使用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],'?')
答案 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)