2013-07-31 2 views
0

Я пытаюсь написать функцию, которая обрабатывает значение столбца и возвращает значение со всем символом «@».Если значение содержит определенный символ, то сделайте это или сделайте это

мне удалось сделать это до сих пор, используя следующий код:

Create Function fnStaffCodeConvert (@staffcode varchar(10)) 
Returns varchar(4) 
AS 
BEGIN 
    DECLARE  @staffinitals varchar(4) 
    SET @staffinitals = (SELECT substring(@staffcode,0, CHARINDEX('@',@staffcode))) 
    Return @staffinitials 
END 

Пример результата из функции - параметр в = AB[email protected], возвратов = ABC.

Это работает, но затем исключительно возвращает каждый результат, когда столбец содержит значение @, а оставшиеся результаты без @ опущены. То есть [email protected] возвращение ABC но XYZ не возвращается ничего.

Как я могу изменить код, чтобы дать мне оба набора значений? Я предполагаю, что мне пришлось бы поставить заявление «IF» там, но я не уверен, как написать его, чтобы получить результаты, которые я хочу.

Большое спасибо заранее :)

Mike

+0

Возможно, вы должны добавить тэг для ** LANGUAGE **, который используете для написания функции? Разве вы не думаете, что может быть подходящим тегом типа 'sql'? – Mecki

+1

Какую базу данных вы используете? –

ответ

0

Вы почти там:

ALTER FUNCTION fnStaffCodeConvert (@staffcode varchar(10)) 
RETURNS VARCHAR(4) 
AS 
BEGIN 
    DECLARE @staffinitals AS VARCHAR(4) 
    if CHARINDEX('@',@staffcode) <> 0  
    SET @staffinitals = (SELECT substring(@staffcode,0, CHARINDEX('@',@staffcode))) 
    Else 
    SET @staffinitals = @staffcode 

    RETURN @staffinitals 
END 
0

Вы можете делать то, что вы хотите с case:

Create Function fnStaffCodeConvert (@staffcode varchar(10)) 
Returns varchar(4); 
AS 
BEGIN 
    DECLARE  @staffinitals varchar(4); 
    SET @staffinitals = (SELECT (case when @staffcode like '%@%' 
             then substring(@staffcode,0, CHARINDEX('@',@staffcode) 
             else @staffcode 
            end)); 
    Return @staffinitials; 
END 

Но ждать , вы можете упростить это далее:

Create Function fnStaffCodeConvert (@staffcode varchar(10)) 
Returns varchar(4) 
AS 
BEGIN 
    DECLARE @staffinitals varchar(4) 
    SELECT @staffinitials = (case when @staffcode like '%@%' 
            then substring(@staffcode,0, CHARINDEX('@',@staffcode) 
            else @staffcode 
          end); 
    Return @staffinitials; 
END; 
Смежные вопросы