Использование оператора SELECT с NOT LIKE. Я хотел бы исключить несколько значений из столбца, но SQLite не поддерживает REGEX - PullRequest
0 голосов
/ 07 октября 2019

Я запрашиваю данные в SQLite, и мне нужно исключить строки в соответствии со значениями в одном из полей (SaleCondition) CIHMNQRTUVW7. Это значения, которые я хочу исключить, но SQLite не поддерживает REGEX, и я пробовал несколько операторов NOT LIKE %C%, но они не работают.

Я использую R для этого:

filter_calcs1 <- dbGetQuery(nqdb, statement = "SELECT * FROM trds WHERE SaleCondition NOT LIKE '%CIHMNQRTUVW7%' ORDER BY Symbol")

Поле SaleCondition может иметь несколько значений, поэтому мне нужно удалять значения по одному за раз или все сразу. Это значения, которые необходимо исключить: CIHMNQRTUVW7

Ответы [ 2 ]

0 голосов
/ 08 октября 2019

Мы предполагаем, что проблема состоит в том, чтобы удалить строки, для которых C или I или H или ... или 7 появляются в SaleCondition. strFilter(SaleCondition, 'CIHMNQRTUVW7') вернет SaleCondition, но без символа, не во втором аргументе. То есть единственными символами в результате будут символы в обоих аргументах. Таким образом, мы хотим сохранить только те строки, для которых выходные данные strFilter являются строкой нулевой длины.

SELECT *
FROM trds 
WHERE strFilter(SaleCondition, 'CIHMNQRTUVW7') = ''
ORDER BY Symbol
0 голосов
/ 08 октября 2019

Для нескольких предложений NOT LIKE необходимо AND условия, а не ИЛИ их, например: -

SELECT * FROM trds WHERE 
    SaleCondition NOT LIKE '%CIHMNQRTUVW7%' 
        AND SaleCondition NOT LIKE '%7WVUTRQNMHIC%' 
        AND SaleCondition NOT LIKE '%ABCDEFGHIJK1%' ;

например, если таблица содержит строки, такие как: -

blah CIHMNQRTUVW7 to be excluded
blah CIHMNQRTUVW8 not to be excluded
blah 7WVUTRQNMHIC to be excluded
blah 8WVUTRQNMHIC not to be excluded
blah ABCDEFGHIJK0
blah ABCDEFGHIJK1
blah ABCDEFGHIJK2

Тогда приведенный выше выбор приводит к: -

blah CIHMNQRTUVW8 not to be excluded
blah 8WVUTRQNMHIC not to be excluded
blah ABCDEFGHIJK0
blah ABCDEFGHIJK2

Re Комментарий: -

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

Скажем, таблица содержит: -

blah CIHMNQRTUVW7 to be excluded
blah CIHMNQRTUVW8 not to be excluded
blah 7WVUTRQNMHIC to be excluded
blah 8WVUTRQNMHIC not to be excluded
blah ABCDEFGHIJK0
blah ABCDEFGHIJK1
blah ABCDEFGHIJK2
blah ABCDEFGHIJK0 ABCDEFGHIJK2
blah ABCDEFGHIJK0 ABCDEFGHIJK2 ABCDEFGHIJK1 CIHMNQRTUVW7 CIHMNQRTUVW8 7WVUTRQNMHIC will be excluded

Результат использования запроса:-

blah CIHMNQRTUVW8 not to be excluded
blah 8WVUTRQNMHIC not to be excluded
blah ABCDEFGHIJK0
blah ABCDEFGHIJK2
blah ABCDEFGHIJK0 ABCDEFGHIJK2

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

Альтернативой и, возможно, более легкой для логического понимания является использование instr функция (которая может быть более гибкой), она возвращает позицию 1 для первого символа и т. Д. Например, рассмотрим: -

SELECT * FROM trds WHERE 
    instr(SaleCondition,'CIHMNQRTUVW7') 
    + instr(SaleCondition,'7WVUTRQNMHIC') 
    + instr(SaleCondition,'ABCDEFGHIJK1') 
    = 0;

Этот запрос может быть более полезным для понимания, он показывает логику trueили false отдельных проверок, а затем окончательного результата: -

SELECT 
        SaleCondition NOT LIKE '%CIHMNQRTUVW7%' AS chk1,
        SaleCondition NOT LIKE '%7WVUTRQNMHIC%' AS chk2,
        SaleCondition NOT LIKE '%ABCDEFGHIJK1%' AS chk3,
        SaleCondition NOT LIKE '%CIHMNQRTUVW7%' 
        AND SaleCondition NOT LIKE '%7WVUTRQNMHIC%' 
        AND SaleCondition NOT LIKE '%ABCDEFGHIJK1%' AS result FROM trds

chk1    chk2    chk3    result 
0       1       1       0
1       1       1       1
1       0       1       0
1       1       1       1
1       1       1       1
1       1       0       0
1       1       1       1
1       1       1       1
0       0       0       0

Таким образом, только если все из первых трех столбцов верны (1), комбинация результатов будет 1из-за ANDS

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