Все,
Я пытаюсь найти фразу ("Observed TRD3 Ufls" в длинной строке, и у меня возникают проблемы. Иногда подстрока может быть в начале, иногда в середине, а иногда в конце. Я пытаюсь что-то вроде
MAX(CASE WHEN REGEXP_LIKE(B.shipment,'Observed TRD3 Ufls','i') THEN 1 ELSE 0 END) OVER (PARTITION BY d.Status) AS Tag
Иногда наблюдаемое можно наблюдать, поэтому мне нужно иметь возможность получить и то, и другое, и, наконец, оно должно быть нечувствительным к регистру.
Каждый результат, который я просматриваю, всегда равен 0 вместо 1. Будем признательны за любую помощь!
Вместо REGEXP
вы можете просто использовать подобное следующим образом:
upper(B.shipment) LIKE '%OBSERVED TRD3 UFLS%'
Обратите внимание, что у меня это работает нормально, даже если совпадающая строка находится в начале, середине или конце столбца.
@AwFawk Это также будет соответствовать UNOBSERVED TRD3 UFLSAAA
, что может быть не тем, что вам нужно.
Это можно решить с помощью пробелов в начале и конце соответствующей строки.
Мне кажется, что ваша текущая логика регулярных выражений должна отображаться в предложении where
:
SELECT *
FROM yourTable
WHERE REGEXP_LIKE(shipment, 'Observed TRD3 Ufls', 'i');
Ваш текущий вызов REGEXP_LIKE
уже должен выполнять поиск текста без учета регистра. Обратите внимание, что, строго говоря, если вы хотите найти точный текст Observed TRD3 Ufls
внутри текста, вы должны использовать границы слов:
SELECT *
FROM yourTable
WHERE REGEXP_LIKE(shipment, '(^|\s)Observed TRD3 Ufls(\s|$)', 'i');
Это будет соответствовать тексту в начале, середине или конце.
Это не сработало в заявлении о деле. :( У меня есть другие критерии того, где так нужно использовать, когда помечать эти экземпляры.
Вы не задали полный вопрос, потому что не показали полный запрос или какие-либо данные. И, в результате, получается, что я дал не полный ответ. Никаких сюрпризов.
Как новичок, я ценю вашу доброту. Спасибо за попытку, и мои извинения.
Спасибо! Это сработало. Я добавлю или НРАВИТСЯ «% OBSERVE TRD3 UBLS%», чтобы поймать других.