Значения таблицы сервера SQL отличаются пространством - PullRequest
1 голос
/ 30 марта 2011

Я выполняю запросы с общими значениями и группами на основе значения другого столбца, в данном случае это столбец ITEM.

В результатах я нахожу, что ПУНКТ иногда возвращается дважды для определенных значений, что приводит к тому, что итоговые значения неверны. Глядя на отдельные значения, я нашел следующие значения:
'20' и ' 20'. Теперь я попытался обновить таблицу и удалить все начальные и конечные пробелы, но, похоже, это не помогло. Любые идеи>

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

и итоговые результаты показывают

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

как я могу это изменить.

Ответы [ 3 ]

1 голос
/ 30 марта 2011

Вы можете запустить что-то вроде этого:

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 
0 голосов
/ 02 апреля 2011

Сначала попробуйте найти значение 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

Если у вас много предметов, вы можете использовать курсор для циклического просмотра.
Надеюсь, это поможет.

0 голосов
/ 30 марта 2011

если все ваши значения "item" являются целыми числами без начальных нулей, вы можете сделать это:

update TableA set item = convert(int,item)

или даже как-то так:

update TableA set item=convert(int,item) WHERE item like '%20' or item like '%3'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...