Используя оператор SQL LIKE с %%

Я пошел бы с clearfsimport сценарием, лучше оборудованным для импорта многократно того же набора файлов, и автоматически:

  • добавляют, что новые файлы,
  • делают новую версию существующих файлов ранее импортированной (но измененный в исходном наборе повторно импортированных файлов)
  • удаляют файлы, уже импортированные, но больше не существующие в исходном наборе файлов.
  • делают ясный журнал из всех операций сделанным во время процесса импорта.

Поэтому, если Ваше 'предоставление zip-файла должно быть обновлено на регулярно, основанием, clearfsimport является способ пойти, но со следующими опциями:

clearfsimport -preview -rec -nset c:\sourceDir\* m:\MyView\MyVob\MyDestinationDirectory

Примечание:

  • - опция предварительного просмотра: это позволит проверять , что произошло бы , ничего на самом деле не делая.
  • '*' используемый только в среде Windows, для импорта содержания каталога
  • -nset опция.

От CMWiki, об этом 'nset' опция:

По умолчанию, clearfsimport предназначен, чтобы использоваться vob владельцем или привилегированным пользователем, но пользователи часто пропускают-nsetevent опцию, с которой он может использоваться любым пользователем.
Эта опция управляет clearfsimport для не установки меток времени элементов к этому объекта исходного файла вне vob (который требует привилегированного доступа).
существует незначительный неочевидный побочный эффект с этим: как только версия будет создана со штампом текущего времени, даже vob владелец не будет в состоянии импортировать сверху ее версию с более старым (как это было бы), метка времени, без этой-nsetevent опции. Т.е. как только Вы используете эту опцию, обычного или привилегированного пользователя, Вы более или менее обязаны использовать ее в продолжении.

5
задан Peter Mortensen 22 May 2016 в 16:15
поделиться

5 ответов

Оберните таблицу «B» оператором OR , например:

AND (len(searchString)=0 OR table_b.column_b LIKE "%searchString%" )

Таким образом, если для строки нет значения, ее длина будет равна нулю, а первая часть ИЛИ будет оцениваться, всегда возвращаться как истина и возвращать эту часть уравнения как действительную и игнорировать другую половину, используя предложение LIKE .

Вы могли бы примените то же самое для любого количества связанных таблиц.

10
ответ дан 18 December 2019 в 13:16
поделиться

Во-первых, в вашем примере есть место:

AND TABLE_B.COLUMN_B LIKE '% %'

Это никогда не будет оптимизировано, так как это действительно важное условие.

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

Например, SQL Server 2005 предлагает один и тот же план выполнения для двух типов запросов, тогда как MySQL 5.0.38 - нет.

2
ответ дан 18 December 2019 в 13:16
поделиться

Вы можете переписать свой запрос следующим образом:

SELECT TABLE_A.* FROM TABLE_A, TABLE_B WHERE TABLE_A.KEYCOLUMN_A = TABLE_B.FKCOLUMN_B
AND (@paramA='' or TABLE_A.COLUMN_A LIKE '%' + @paramA + '%')
AND (@paramB='' or TABLE_B.COLUMN_B LIKE '%' + @paramB + '%')

Таким образом, если paramA или paramB равно '', то другой столбец, запрашиваемый в тех же скобках, не будет опрошен.

0
ответ дан 18 December 2019 в 13:16
поделиться

В MySQL вы также можете использовать ILIKE, и тогда он нечувствителен к регистру.

0
ответ дан 18 December 2019 в 13:16
поделиться

Используйте UNION и правильные JOIN.

Поисковый запрос% foo% достаточно плох (нельзя использовать индекс) без добавления OR и LEN к смеси.

SELECT
    TABLE_A.*
FROM
    TABLE_A
    JOIN
    TABLE_B On TABLE_A.KEYCOLUMN_A = TABLE_B.FKCOLUMN_B
WHERE
    TABLE_A.COLUMN_A LIKE '%SEARCH%' AND TABLE_B.COLUMN_B LIKE '%SEARCH2%'
UNION
SELECT
    TABLE_A.*
FROM
    TABLE_A
WHERE
    TABLE_A.COLUMN_A LIKE '%SEARCH%'
0
ответ дан 18 December 2019 в 13:16
поделиться
Другие вопросы по тегам:

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