2012-01-25 3 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? 
... 

Обратите внимание, что она должна включать в себя только все перед первым знаком вопроса, поэтому в третьей записи она должна возвращать только «PSYCHOTIC ПОВЕДЕНИЕ ", а не все, что заканчивается на" потом ".

Как это сделать? Я попробовал следующее выражение в 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 
Смежные вопросы