Как проверить, соответствуют ли первые пять символов одного поля другому? - PullRequest
4 голосов
/ 03 февраля 2012

Предполагая, что у меня есть следующая таблица:

AAAAAA
AAAAAB
CCCCCC

Как я могу создать запрос, который позволил бы мне узнать, что AAAAA и AAAAB похожи (так как они имеют пять символов подряд)? В идеале я хотел бы написать это как запрос, который проверял бы, разделяют ли два поля пять символов подряд где-либо в строке, но это выходит за рамки SQL и что-то, что я должен написать в приложение C #?

В идеале запрос должен добавить еще один столбец, который отображает: Similar to 'AAAAA', 'AAAAB'

Ответы [ 3 ]

7 голосов
/ 03 февраля 2012

Я предлагаю вам не пытаться нарушать 1NF, вводя многозначный атрибут.

Отмечая, что SUBSTRING очень переносим:

WITH T 
     AS
     (
      SELECT * 
        FROM (
              VALUES ('AAAAAA'), 
                     ('AAAAAB'), 
                     ('CCCCCC')
             ) AS T (data_col)
     )
SELECT T1.data_col, 
       T2.data_col AS data_col_similar_to
  FROM T AS T1, T AS T2
 WHERE T1.data_col < T2.data_col
       AND SUBSTRING(T1.data_col, 1, 5) 
              = SUBSTRING(T2.data_col, 1, 5);

Alternativvely:

T1.data_col LIKE SUBSTRING(T2.data_col, 1, 5) + '%';
3 голосов
/ 03 февраля 2012

Это найдет все совпадения, в том числе и в середине слова, не будет хорошо работать на большом столе

2 голосов
/ 03 февраля 2012

Вы можете использовать left , чтобы сравнить первые пять символов, и вы можете использовать for xml path, чтобы объединить похожие строки в один столбец.1008 *

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