2016-04-12 54 views
-2

我需要一個創建的函數(EscapeAmpersand)。該函數應該帶1個varchar(255)參數。它應該返回一個varchar(255)參數。該功能的目的是接受輸入,將‘&’替換爲‘&’並返回結果。我需要幫助創建一個TSQL函數

實例:

輸入:‘my dog & me’返回:‘my dog & me’

輸入:‘my dog and me’返回:‘my dog and me’

+1

這就是'REPLACE()'用於......使用或包裝。 –

+1

這是更好地由表示層處理的那種東西。內置的函數可以在大多數情況下使用,如果不是所有與Web相關的編程語言和環境都可以做得更好。 –

+0

這個作業是?如果是這樣,請注意,如果你只是讓人們爲你寫信,你就不會學到太多東西。 – halfer

回答

0

標量值函數:

CREATE FUNCTION fReplaceAmpersand (@InputString VARCHAR(255)) 
RETURNS VARCHAR(1000) 
AS 
BEGIN 
    RETURN REPLACE(@InputString, '&', '&') 
END 
GO 

用法:

SELECT dbo.fReplaceAmpersand(MyText) 
FROM MyTable 

從性能的角度來看,如果你的表是非常大的,你會更好使用表值函數和OUTER APPLY:

CREATE FUNCTION fReplaceAmpersand (@InputString VARCHAR(255)) 
RETURNS TABLE 
AS 
    RETURN 
    SELECT REPLACE(@InputString, '&', '&') AS OutputString 
GO 
-- ---------------------------------------------------- 
SELECT a.OutputString 
FROM MyTable m 
    OUTER APPLY dbo.fReplaceAmpersand(m.MyText) a 

無順序表值函數可以操作幾個時間比標量值更快。

+0

謝謝羅素福克斯 –

+0

NP,很高興提供幫助。請注意,返回的值較大,因爲對於每個替換操作,通過添加「amp;」可以使字符串長四個字符。從技術上講,它應該返回varchar(1275),以防255符號傳遞,但這似乎很實用。如果你偏執,你可以將它改爲左(REPLACE ...,1000)。 –

0
REPLACE(input,'&','&'||'amp')