Искать в столбце таблицы SQL Server, который имеет только несколько начальных и конечных пробелов - PullRequest
0 голосов
/ 08 ноября 2019

Я выбираю данные из таблицы SQL Server, которая имеет начальные пробельные символы (может быть один, два или более), а также содержит конечные пробелы (может быть один, два и более).

Iиспользовали LIKE ' %' для поиска значения начальных пробелов и использовали LIKE '% ' для записей конечных пробелов, но отображаемый результат поиска возвращает только те записи, у которых в качестве начального / конечного пробела есть только один пробел. Но я не уверен, что числовые пространства доступны в записях.

Это запрос, который я пробовал:

SELECT [ColumName1], [ColumName], * 
FROM [table1]  
WHERE [ColumName] LIKE ' %' OR [ColumName] LIKE '% '

Ожидаемый результат:

'   Testdata1', 'Test2  ', ' Test3','     Test4 '

Но фактический результатэто:

'Test3 '

Ответы [ 6 ]

1 голос
/ 08 ноября 2019

Есть более простой способ сделать это без использования лайков. TRIM обрезает конечные пробелы, вы можете использовать это для фильтрации. Здесь вы сравниваете урезанную версию каждого [ColumName] с неокрашенной версией и возвращаете те, которые отличаются. Это выполняет то, что вы хотите.

select 
[ColumName1], [ColumName], * 
from  [table1]  
WHERE TRIM([ColumName]) <> [ColumName]

Это создает все поля, которые имеют (один или несколько) конечные или начальные пробелы.

В зависимости от вашей версии SQL Server, TRIM можетбыть недоступнымНеважно, что есть обходной путь:

select 
[ColumName1], [ColumName], * 
from  [table1]  
WHERE LTRIM([ColumName]) <> [ColumName]
OR RTRIM([ColumName]) <> [ColumName]
0 голосов
/ 08 ноября 2019

Наконец я обнаружил, что значения столбцов были сохранены со специальными значениями ascii, поэтому эти символы не были удалены при использовании LTRIM, RTRIM.

Это сработало: LTRIM (RTRIM (REPLACE (REPLACE (REPLACE (REPLACE (безразличия, CHAR (10), CHAR (32)), CHAR (13), CHAR (32)), CHAR (160), CHAR (32)), CHAR (9), CHAR (32))))

0 голосов
/ 08 ноября 2019

Попробуйте использовать LTRIM с операторами RTRIM и LIKE для поиска пробелов. Позвольте мне показать пример:

DECLARE @tbl TABLE 
(
    FooColumn VARCHAR(100)
)

INSERT INTO @tbl
VALUES
(' Example1'),
('  Example2'),
('Example3 '),
('Example4  '),
('Example5')

SELECT 
t.FooColumn
FROM  @tbl t  
WHERE RTRIM(t.FooColumn) LIKE '% %' OR LTRIM(t.FooColumn) LIKE '% %'
0 голосов
/ 08 ноября 2019

Если я не ошибаюсь, SQL Server LIKE разрешает наборы символов. Мы можем использовать это для поиска управляющих и пробельных символов, исключая символы, которые мы разрешаем (буквы и цифры). Пожалуйста, попробуйте:

SELECT * 
FROM [table1]  
WHERE [ColumName] LIKE '[^A-Za-z0-9]%' OR [ColumName] LIKE '%[^A-Za-z0-9]';
0 голосов
/ 08 ноября 2019

Вы можете попробовать это,

DECLARE @Temp_Table TABLE 
(
    ColumnName VARCHAR(100)
)

INSERT INTO @Temp_Table
VALUES
(' Test1'),
('  Test2'),
('Test3 '),
('Test4  '),
('Test5')

SELECT ColumnName
FROM  @Temp_Table  
WHERE (LEFT(ColumnName,1)=' ' OR RIGHT(ColumnName,1)=' ')
0 голосов
/ 08 ноября 2019

Попробуйте следующий ответ.

Здесь я вставляю значения с spaces и tabs. Это даст мне все возможные результаты.

Схема:

CREATE TABLE A(ColumnName VARCHAR(100))

INSERT INTO A VALUES(' Test1')
INSERT INTO A VALUES('  Test2')
INSERT INTO A VALUES('Test3 ')
INSERT INTO A VALUES('Test4  ')
INSERT INTO A VALUES('Test5')

T-SQL:

SELECT * 
FROM A
WHERE ColumnName LIKE ' %' OR ColumnName LIKE '%    '
      OR ColumnName LIKE ' %' OR ColumnName LIKE '% '

Проверьте результат в SQL Fiddle

Надеюсь, что это решит вашу проблему.

...