Я пытаюсь заставить это работать:
with a as (select '1'::varchar(32) as x),
b as (select '10'::varchar(32) as x)
select *
from b
left join a using(x)
where b.x like '%1%'
;
x
----
10
Выбрана 1 запись [Fetch MetaData: 0ms] [Fetch Data: 0ms]
но мне нужно использовать:
where b.x like '%' || a.x || '%'
;
x
----
0 record(s) selected [Fetch MetaData: 0ms] [Fetch Data: 0ms]
Любые идеи?
Я даже сюда этот вопрос поставил Значение столбца Redshift LIKE с% откуда взялась идея.
Спасибо
взгляните на функцию strpos, чтобы узнать, находится ли a в пределах b
@Swapnil, ожидаемый результат находится в первом блоке, x = 10
Не редактируйте вопрос на аннулировать существующие ответы. Вы всегда можете опубликовать ответ, если он отличается от текущего ответа.
Вы можете использовать функцию strpos, чтобы узнать, находится ли a в пределах b
см. https://docs.aws.amazon.com/redshift/latest/dg/r_STRPOS.html
where strpos(b,a) > 0
Когда я использую strpos () таким образом, Select strpos ('10 ',' 1 ')> 0 затем работает, другими словами, это «ИСТИНА», но этого не происходит в приведенном ниже коде. с a as (выберите '1' :: varchar (32) as x), b as (выберите '10' :: varchar (32) as x) выберите * from b left join a using (x), где strpos (bx, ах)> 0; Что мне не хватает?
@gafeta В вашем примере a.x = b.x
(из-за using(x)
), поэтому ответом всегда будет ноль. Я предлагаю вам отредактировать свой вопрос, чтобы показать образец входной таблицы, а затем образец результата, который вы хотите, и тогда мы сможем вам лучше помочь.
@John Rotenstein, вы совершенно правы. Спасибо за вклад, я думаю, что сейчас у меня есть не одно, а два решения для этого.
Пожалуйста, поделитесь входными данными и ожидаемым результатом. Почему вы хотите использовать второй синтаксис?