SQL - Как я могу искать конкретные данные в текстовом поле? Например. Мне нужны строки, которые включают C1 + любой символ, например C1 $, кроме другого числа, например C19 - PullRequest
0 голосов
/ 04 сентября 2018

Мне нужно найти в базе данных два конкретных значения, это C1 и C5, которые появляются в примечаниях в каждой строке.

Однако некоторые заметки содержат такую ​​информацию, как C128, C523, C100 - я не хочу их извлекать.

Чтобы усложнить ситуацию, некоторые заметки содержат С1 и С5 сами по себе, например, с пробелом непосредственно после числа, но некоторые примечания содержат С1 и С5 с буквами сразу после них, например C1DANNY, C5CLAIRE, C1RUN - мне нужно вытащить их, а также те, которые говорят только C1 и C5.

например. База данных

ID  Notes
1   C1
2   C128
3   C5
4   C1
5   C1DANNY
6   C25
7   C1RUN
8   C10
9   C523
10  C5!

Итак, из приведенной выше базы данных я хочу получить только строки: 1, 3, 4, 5, 7 и 10.

Я не хочу вытягивать что-либо, имеющее номер после второй цифры, например строку 8 выше. Я хочу вытащить все, что имеет любой символ, кроме числа после второй цифры, например строки 3 и 10.

Я должен также упомянуть, что я читал о том, какие подстановочные знаки я могу использовать здесь https://www.w3schools.com/sql/sql_wildcards.asp но я чувствую, что мне, вероятно, нужно использовать оператор IF для циклического обхода и проверки того, что включено в каждую заметку, кроме база данных довольно большая (сотни тысяч строк).

Некоторый код уже написан предыдущим работником. Данный код:

(
  esl.log_text LIKE 'C1%' OR
  esl.log_text LIKE 'C5%' OR
  esl.log_text LIKE '%' + CHAR(10) + 'C1%' OR
  esl.log_text LIKE '%' + CHAR(10) + 'C5%' OR
  esl.log_text LIKE '%' + CHAR(13) + 'C1%' OR
  esl.log_text LIKE '%' + CHAR(13) + 'C5%'
)

К сожалению, это, кажется, тянет линии, которые включают, например, C10. Я новичок в SQL и переполнении стека, и любая помощь в том, какой код я мог бы использовать для достижения этой цели, была бы очень признательна.

1 Ответ

0 голосов
/ 04 сентября 2018

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

SELECT Notes
FROM dbo.Testing_Code AS T0
WHERE (LEFT(Notes, 2) IN ('C1', 'C5')) AND (ISNUMERIC(SUBSTRING(Notes, 3, 20)) = 0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...