2013-07-31 30 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 

實施例從功能產生 - 在= [email protected],返回= ABC參數。

此工作原理但僅返回列中包含@值的每個結果,其餘結果不包含@。即[email protected]返回ABCXYZ不返回任何內容。

我該如何修改代碼才能給我兩組值?我想我必須在那裏放一個'IF'聲明,但我不確定如何寫它來獲得我想要的結果。

提前:)

邁克非常感謝

+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; 
相關問題