Sql server sql server表值因空间而异

Sql server sql server表值因空间而异,sql-server,tsql,sql-server-2008,Sql Server,Tsql,Sql Server 2008,我运行的查询是基于另一列的值对总值和组进行查询,在本例中,该列是项 在结果中,我发现某些值的项有时会返回两次,从而导致总数不正确。查看各个值,我发现这些值是: '20'和'20'。现在我尝试更新表并删除所有前导和尾随空格,但似乎没有帮助。任何想法> update TableA set item = ltrim(rtrim(item)) 结果显示 item count 20 2000 3 1000 20 500 3

我运行的查询是基于另一列的值对总值和组进行查询,在本例中,该列是项

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

update TableA
set item = ltrim(rtrim(item))
结果显示

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

如何更改此设置。

您可以运行以下操作:

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 
update TableA set item=convert(int,item) WHERE item like '%20' or item like '%3'

您可以运行类似这样的操作:

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 
update TableA set item=convert(int,item) WHERE item like '%20' or item like '%3'
如果所有“项”值都是整数,没有前导零,则可以执行以下操作:

update TableA set item = convert(int,item)
甚至像这样:

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 
update TableA set item=convert(int,item) WHERE item like '%20' or item like '%3'
如果所有“项”值都是整数,没有前导零,则可以执行以下操作:

update TableA set item = convert(int,item)
甚至像这样:

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 
update TableA set item=convert(int,item) WHERE item like '%20' or item like '%3'

首先尝试查找项目的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
如果您有多个项目,则可以使用光标进行循环。

希望这有帮助。

首先尝试查找项目的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
如果您有多个项目,则可以使用光标进行循环。

希望这有帮助。

@vbNewbie:这是你发布的完整更新声明吗?如果存在某些WHERE(或groupby)子句,则可能不会命中需要命中的行。这些子句可能是回车符或制表符,而不是空格。如果是这样,这个函数可能会帮助我如何在语句中使用where@skarmats@vbNewbie:只需在某些条件下添加
。您甚至可以加入UPDATE语句。但我想你两个都没做。或者更新语句还有其他内容吗?我知道如何使用where,但如果说where item=?????@vbNewbie:这是您发布的完整更新语句吗?如果存在某些WHERE(或groupby)子句,则可能不会命中需要命中的行。这些子句可能是回车符或制表符,而不是空格。如果是这样,这个函数可能会帮助我如何在语句中使用where@skarmats@vbNewbie:只需在某些条件下添加
。您甚至可以加入UPDATE语句。但我想你两个都没做。或者UPDATE语句还有更多内容吗?我知道如何使用where,但如果说where item=????