Как сделать sql поисковый запрос более мощным?

Для ввода переключите его класс переключения. Если он активен, то добавлен класс, проверяемый переключателем пользовательского интерфейса.

<p-inputSwitch [ngClass]="(doc.fileStatus === 'ACTIVE')?'ui-inputswitch-checked':''" (onChange)="activeInactive(doc)" [(ngModel)]="doc.fileStatus">

Если вы хотите стилизовать переключатель ввода для активного и неактивного состояния, используйте класс ниже для активного и неактивного состояния

Для неактивного состояния

.ui-inputswitch.ui-widget {
}
[ 117] Для активного состояния

.ui-inputswitch.ui-widget.ui-inputswitch-checked {
}
7
задан blo0p3r 29 May 2014 в 15:30
поделиться

6 ответов

что-то как

Select * from TableName where Name Like 'Spa%'
ORDER BY case when soundex(name) = soundex('Spa') then '1' else soundex(name) end

должен работать хорошо.

на самом деле это будет работать лучше

Select * from TableName where Name Like 'Spa%'
ORDER BY DIFFERENCE(name, 'Spa') desc;

FWIW я сделал некоторые быстрые тесты и если 'Имя' находится в НЕКЛАСТЕРИЗОВАННОМ ИНДЕКСЕ SQL, будет использовать индекс и не делает сканирования таблицы. Кроме того, КАК, кажется, использует меньше ресурсов, чем charindex (который возвращает менее желательные результаты). Протестированный на sql 2000.

10
ответ дан 6 December 2019 в 11:53
поделиться

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

Большая проблема Ваш "КАК '%spa %'". Любой "КАК" ключевой запуск с подстановочного знака - автоматическое сканирование таблицы.


Править: Я считал Ваш вопрос сказать, что существует единственное поле, Имя, со значениями полей что-то как "1 Space Company", "2 Спа-курорта", и т.д. с числом, сопровождаемым словами. И Вам был нужен подстановочный знак перед Вашим ключом поиска для заканчивания части числа. (Это должно разъяснить мой первый комментарий.) Я предполагаю правильно или нет?
5
ответ дан 6 December 2019 в 11:53
поделиться

Следующее должно сделать необходимое, но это неэффективно, делание двух полных таблиц выбирает, и это также полагается на Ваше точное совпадение, разграничиваемое пробелами. Я думаю, что Полнотекстовое индексирование помогло бы, но это имеет собственные издержки.

select distinct * from
(
Select * from TableName 
   where CHARINDEX('spa ', Name) > 0
   or CHARINDEX(' spa', Name) > 0
Union
Select * from TableName 
  where Name Like '%spa%'
)
1
ответ дан 6 December 2019 в 11:53
поделиться

Уходя главный пример, по крайней мере, в MSSQL2005, изменяющем КЛАСТЕРИЗОВАННОЕ на NONCLUSTERED, заставит его сделать сканирование таблицы. КЛАСТЕРИЗИРУЕМЫЙ дает Вам, индекс ищет. Похож это соответствует условиям вопроса.

CREATE TABLE tblTest(ID INT, colname VARCHAR(20) )
CREATE CLUSTERED INDEX tstidx1_tblTest ON tblTest(colname);
INSERT tblTest SELECT 1,'Space Company'
INSERT tblTest SELECT 2,'Spa Resort'
INSERT tblTest SELECT 3,'Spa Hotel'
INSERT tblTest SELECT 4,'Spare Parts'
INSERT tblTest SELECT 5,'WithoutTheKeyword'

SELECT * FROM tblTest WHERE colname LIKE 'Spa%'
ORDER BY DIFFERENCE(colname,'Spa') DESC;

DROP TABLE tblTest
1
ответ дан 6 December 2019 в 11:53
поделиться

В основном необходимо определить (точно), какова функция рейтинга действительно. Что, если у Вас есть строка, которая является "Спа". или "spa.com"? После того как Вам определили это, необходимо поместить ту логику в пункт ORDER BY. Например:

SELECT
    name
FROM
    Some_Table
WHERE
    name LIKE '%spa%'
ORDER BY
    CASE
        WHEN name LIKE '% ' + @search_word + ' %' THEN 1   -- Notice the spaces
        ELSE 2
    END,
    name

С другой стороны, Вы могли записать занимающую место функцию и использование что:

SELECT
    name
FROM
    Some_Table
WHERE
    name LIKE '%' + @search_word + '%'
ORDER BY
    dbo.GetNameMatchRank(name, @search_word)

Производительность на очень больших наборах результатов не может быть слишком большой, таким образом, этот подход зависит от Ваших ожидаемых размеров результата поиска.

1
ответ дан 6 December 2019 в 11:53
поделиться

Это должно работать:

Select * from TableName where Name Like '%spa%'
ORDER BY Name
-1
ответ дан 6 December 2019 в 11:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: