SQL Server: частичный поиск по целочисленному столбцу

#sql-server

#sql-сервер

Вопрос:

В моей базе данных есть целочисленный столбец, и я хочу выполнить частичный поиск по этому целому числу. Например:

 Column values:
1234, 1345, 167, 1236
  

Примеры запросов и результатов:

  "12" - 1234, 1236
 "1" -  1234, 1345, 167, 1236
  

Комментарии:

1. В чем смысл такого запроса? Вы использовали целое число для хранения того, что по сути является иерархическим путем? Вместо этого было бы лучше использовать строку или специально созданный тип hierarchyid

2. Если вы использовали строку, которая кодировала каждый уровень иерархии как строку фиксированной длины, например 01.02.05.05 , вы могли бы использовать LIKE '01.02% для поиска всех узлов ниже 01.02 , использование любых индексов в этом поле LIKE 'abc% — это, по сути, поиск по диапазону, который может быть ускорен с помощью индекса. hierarchyid работает так же, за исключением того, что может кодировать большие значения, занимает меньше места и предлагает удобные функции для извлечения уровня, дочерних элементов определенного узла, родительских узлов и т. Д

Ответ №1:

Вы можете преобразовать целочисленное значение в текст, а затем выполнить LIKE сравнение, например

 SELECT *
FROM yourTable
WHERE CAST(int_col AS varchar(max)) LIKE '12%';
  

Однако необходимость часто выполнять это приведение может означать, что ваш int_col целочисленный столбец на самом деле должен быть каким-то текстовым столбцом. Даже если у вас был включен индекс int_col , приведенный выше запрос не мог его использовать.