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=????