sql server表值因空格而异

时间:2011-03-30 17:17:37

标签: sql-server tsql sql-server-2008

我正在运行基于另一列的值的总值和组的查询,在这种情况下该列是ITEM。

在结果中我发现ITEM有时会因特定值而返回两次,从而导致总数不正确。查看各个值,我发现值为:
 '20'' 20'。现在我尝试更新表并删除所有前导和尾随空格但它似乎没有帮助。任何想法>

update TableA
set item = ltrim(rtrim(item))

总计结果显示

   item    count
   20      2000
     3     1000
     20    500
   3       2000
   34      5999

我该怎么改变呢。

3 个答案:

答案 0 :(得分:1)

你可以运行这样的东西:

CREATE FUNCTION dbo.LTrimX(@str VARCHAR(MAX)) RETURNS VARCHAR(MAX) AS
BEGIN
    DECLARE @trimchars VARCHAR(10)
    SET @trimchars = CHAR(9)+CHAR(10)+CHAR(13)+CHAR(32)

    IF @str LIKE '[' + @trimchars + ']%'
        SET @str = SUBSTRING(@str, PATINDEX('%[^' + @trimchars + ']%', @str), 8000)
    RETURN @str
END
GO

CREATE FUNCTION dbo.RTrimX(@str VARCHAR(MAX)) RETURNS VARCHAR(MAX) AS
BEGIN
    DECLARE @trimchars VARCHAR(10)
    SET @trimchars = CHAR(9)+CHAR(10)+CHAR(13)+CHAR(32)
    IF @str LIKE '%[' + @trimchars + ']'
        SET @str = REVERSE(dbo.LTrimX(REVERSE(@str)))
    RETURN @str
END
GO

CREATE FUNCTION dbo.TrimX(@str VARCHAR(MAX)) RETURNS VARCHAR(MAX) AS
BEGIN
    RETURN dbo.LTrimX(dbo.RTrimX(@str))
END
GO


/* Perform Update */
UPDATE TableA SET item = dbo.TrimX(item)
GO 

答案 1 :(得分:0)

如果你的所有“item”值都是整数,没有前导零,你可以这样做:

update TableA set item = convert(int,item)

甚至是这样的:

update TableA set item=convert(int,item) WHERE item like '%20' or item like '%3'

答案 2 :(得分:0)

首先尝试查找项目的ascii值

SELECT ITEM, ASCII(ITEM)
FROM TABLEA

然后使用where子句

进行更新
UPDATE TableA 
SET item = ltrim(rtrim(item))
WHERE ascii(item) = --Put the ascii value of the item that you want to update like 32 or 50 or 49 etc

如果你有很多项目,那么你可以使用光标循环。
希望这会有所帮助。