#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
, приведенный выше запрос не мог его использовать.