我正在运行基于另一列的值的总值和组的查询,在这种情况下该列是ITEM。
在结果中我发现ITEM有时会因特定值而返回两次,从而导致总数不正确。查看各个值,我发现值为:
'20'
和' 20'
。现在我尝试更新表并删除所有前导和尾随空格但它似乎没有帮助。任何想法>
update TableA
set item = ltrim(rtrim(item))
总计结果显示
item count
20 2000
3 1000
20 500
3 2000
34 5999
我该怎么改变呢。
答案 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
如果你有很多项目,那么你可以使用光标循环。
希望这会有所帮助。