Поиск "[" или "]" внутри таблицы с помощью команды SQL - PullRequest
1 голос
/ 28 ноября 2011

В таблице SQL у меня есть следующие столбцы

id, title, content

И я хотел бы искать текст внутри заголовка или содержимого, имеющего " [" или "] ".

Какой будет команда SQL для извлечения данных такого типа?

(правка: удалена" эффективная ")

(добавлено) Согласно" rsbarro "

Я пытался, и мои выводы:

Если я пытаюсь

SELECT * FROM MyTable WHERE Title LIKE '%[%'

, возвращает 0 строку.

Если я пытаюсь

SELECT * FROM MyTable WHERE Title LIKE '%]%' 

возвращает количество строк.

Ответы [ 3 ]

4 голосов
/ 28 ноября 2011

Попробуйте использовать оператор LIKE, но помните, что если вы ищете [, вам нужно экранировать его как [[] (см. Ответ @ billinkc для объяснения побега или проверьте MSDN документацию и найдите раздел «Использование подстановочных знаков в качестве литералов»). Утверждение:

SELECT * FROM MyTable WHERE Title LIKE '%[[]%'

будет искать любую запись в MyTable, где Title содержит [. % является подстановочным знаком.

Я не совсем уверен из вопроса, что вы пытаетесь найти, но если вы хотите найти заголовок, содержащий обе скобки (то есть '?? [match] ??'), попробуйте:

SELECT * FROM MyTable WHERE Title LIKE '%[[]%]%'

EDIT
Если вы пытаетесь сопоставить [или] в заголовке или содержании, запрос будет:

SELECT * FROM MyTable 
WHERE 
      Content LIKE '%[[]%' OR Content LIKE '%]%' OR
      Title LIKE '%[[]%' OR Title LIKE '%]%'

Этот запрос, вероятно, будет не очень эффективным, если у вас есть таблица с большим количеством строк.

3 голосов
/ 28 ноября 2011

Приведенные выше примеры не соответствуют подобию, потому что LIKE предлагает опцию сопоставления одного символа с [].

Any single character within the specified range ([a-f]) or set ([abcdef]).

Для фактического сопоставления [ вам потребуетсявставьте его в пару скобок

;
WITH DEMO (Title) AS
(
    SELECT 'Where are you [ I am here]'
    UNION ALL SELECT 'WHO ARE YOU'
    UNION ALL SELECT 'asdafasfa][asdfadfasdfasdfa'
)
SELECT 
    D.* 
FROM 
    DEMO D 
WHERE 
    D.Title LIKE '%[[]%' 
    OR D.Title LIKE '%[]]%'

Возвращает

Where are you [ I am here]
asdafasfa][asdfadfasdfasdfa
2 голосов
/ 28 ноября 2011

В Sql [ - это специальный символ, где [[] означает [, поэтому приведенный ниже Sql-запрос будет работать соответственно.

SELECT * FROM MyTable WHERE (Title LIKE '%[[]%' OR content LIKE '%[[]%')
                          OR (Title LIKE '%]%' OR content LIKE '%]%')

Пожалуйста, смотрите здесь для более подробной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...