Redshift сопоставление с образцом - PullRequest
0 голосов
/ 05 марта 2020

Что будет сопоставлено, если у меня есть следующие условия для выбора красного смещения:

WHEN a.ref LIKE '%first_test%' 
    THEN 'FIRST'
WHEN a.ref LIKE '%first_test_abc_%'
    THEN 'SECOND'
WHEN a.ref LIKE '%first_test_abc_def%'
    THEN 'THIRD'

и у меня есть запись, значение которой в столбце a.ref = 'abc_first_test_abc_def'? Эта запись соответствует всем трем возможностям. Может быть установлено «ПЕРВЫЙ», «ВТОРОЙ» или «ТРЕТИЙ», поскольку «% first_test%», а также «% first_test_abc_%» соответствуют шаблону. Не только "% first_test_abc_def%" ... Это тогда делается случайно? Или в зависимости от того, как я выставил условия?

1 Ответ

0 голосов
/ 05 марта 2020

Все, что соответствует любому, будет 'FIRST'. CASE выражения оцениваются в порядке . Все, что соответствует '%first_test_abc_def%', также будет соответствовать '%first_test%'.

Итак, сначала поместите самое ограничительное:

WHEN a.ref LIKE '%first_test_abc_def%'
    THEN 'THIRD'
WHEN a.ref LIKE '%first_test_abc_%'
    THEN 'SECOND'
WHEN a.ref LIKE '%first_test%' 
    THEN 'FIRST'

Обратите внимание, что это поведение не c для Redshift. Так работает SQL.

Кроме того, _ является подстановочным знаком для LIKE, поэтому 'firstXtest' также будет соответствовать 'FIRST'.

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