SQL Использование LIKE с подстановочным знаком в CASE с границами значений - PullRequest
0 голосов
/ 08 января 2019

Я пытался найти это в течение долгого времени, но все ответы меня никуда не приводили.

Я пытаюсь написать SQL-запрос, в котором мне нужно сопоставить определенные значения новым группам с подстановочными знаками между определенными границами. Это будет выглядеть примерно так:

SELECT number,
CASE
    WHEN number >= LIKE '0' AND number <= LIKE '009%' THEN 'group 1'
    WHEN number >= LIKE '010%' AND number <= LIKE '027%' THEN 'group 2'
    ELSE '0'
END AS NEW_GROUPS

Это необходимо, потому что числа могут быть как 00923 и 00811, и они должны быть в первой категории. Так как 010.123, 010123 и 0270 должны быть во втором.

Если что-то подобное на самом деле не возможно, тогда также есть возможность использовать метод карты в Python со словарем (что-то вроде:

df['number'].map({..})

Но я не уверен, как использовать здесь лямбда / регулярное выражение / подстановочный знак. Помощь очень ценится!

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Вы ищете что-то подобное?

SELECT number,
       (CASE WHEN number >= '00' AND number < '01' THEN 'group 1'
             WHEN number >= '01' AND number <= '027' THEN 'group 2'
             ELSE '0'
        END) as new_group

Первая группа будет номерами, которые начинаются с "00". Вторым будут числа, которые начинаются со значений в алфавитном порядке в этом диапазоне. «В алфавитном порядке» означает, что «01А» будет соответствовать условиям.

0 голосов
/ 08 января 2019

Если число на самом деле является числовым столбцом, то вы можете делать прямые сравнения. Иначе Я хотел бы использовать что-то вроде следующего, чтобы получить то, что вы хотите. Это немного по-другому, но я думаю, что это поражает то, что вам нужно

case
    When LEN(number)<3 or Cast(Left(Number,3) as Int) < 10 Then 'Group 1'
    When Cast(Left(Number,3) as Int) < 28 Then 'Group 2'

Вам может понадобиться настроить крайние случаи, но я думаю, что это дает общее представление.

...