如何修改从sql中的select中检索的数据?

时间:2014-07-22 13:14:08

标签: sql

假设我在列中存在的数据中有一些不需要的字符,例如,customers表中的name列具有类似< ,无论如何要修改像'<'这样的字符使用select语句检索此数据时的空白?这是为了防止由于具有此类不需要的字符的旧数据而显示xss脚本

例如:

select * 
from customers 

返回

Id   Name      Age  city                    salary
--  ------     ---  ----                    ------
1   <hari      32   Ahmedabad               4000
2   Khilan     25   Delhi                   5678
3   kaushik    23   Kota                    234

当使用select语句检索此数据时,我希望<hari显示为hari。如何实现此目标?

3 个答案:

答案 0 :(得分:2)

像...一样的东西。

SELECT REPLACE(REPLACE(a.name,'<', ''), '>','') 
FROM ...

答案 1 :(得分:1)

编写一个删除特殊字符的函数可能会更好。这里的函数替换了任何看起来不像a-z,A-Z(if case sensitive),0-9 and Space的字符。如果需要,您可以添加更多。 例如,如果要保留句点(。),请使用'[^a-zA-Z0-9 .]'

<强>功能:

CREATE FUNCTION ufn_RemoveSpecialCharacters
(
@String VARCHAR(500),
@Exclude VARCHAR(100),
@CollapseSpaces BIT
)
RETURNS VARCHAR(500)
AS
BEGIN

    DECLARE @StartString INT,
    @EndString INT,
    @FinalString VARCHAR(500),
    @CurrentString CHAR(1),
    @PreviousString CHAR(1)

    SET @StartString = 1
    SET @EndString = LEN(ISNULL(@String, ''))

    WHILE @StartString <= @EndString
       BEGIN
          SET @CurrentString = SUBSTRING(@String, @StartString, 1)
          SET @PreviousString = SUBSTRING(@String, @StartString-1, 1)

          IF @CurrentString LIKE ISNULL(@Exclude,'[^a-zA-Z0-9 ]')
             BEGIN
                SET @CurrentString = ''
                IF @CollapseSpaces = 1
                SET @FinalString = CASE WHEN @PreviousString = CHAR(32) THEN ISNULL(@FinalString, '') ELSE ISNULL(@FinalString, '')+' ' END
             END
          ELSE
             BEGIN
                SET @FinalString = ISNULL(@FinalString, '') + @CurrentString

                IF @CollapseSpaces = 1
                BEGIN
                    SET @FinalString = REPLACE(@FinalString,'  ',' ')
                END
             END
          SET @StartString = @StartString + 1
       END

    --PRINT @String
    RETURN LTRIM(RTRIM(@FinalString))

END
GO

<强>用法:

不会崩溃空间

SELECT dbo.ufn_RemoveSpecialCharacters('This #$%string has#$% special #$% characters     and spaces))', '[^a-zA-Z0-9 ]', 0)

折叠多个空格

SELECT dbo.ufn_RemoveSpecialCharacters('This #$%string has#$% special #$% characters     and spaces))', '[^a-zA-Z0-9 ]', 1)

答案 2 :(得分:0)

以下是示例

SELECT替换(列名,'','')AS C

FROM Contacts

WHERE替换(列名,'','')喜欢'无论'

希望这是有帮助的