Tenho uma string como A18.30 e quero comparar se ela se enquadra nestes 2 valores mínimo e máximo: A17.0 e A19.0.
- A18.30 => A17.0 entre A19.0 [correto]
- P1A.5 => P1.0 entre A2.0 [Incorreto]
A expectativa é que a primeira letra precise ser comparada e os dígitos numéricos restantes, se estiverem no intervalo a ser comparado.
Tentei com substring, mas quero saber se existe uma maneira melhor de fazer a comparação com regex. Eu uso o snowflake db.
Como Ken White mencionou em seu comentário acima, o design da sua tabela não é o ideal. O ideal é que você armazene cada componente numérico em uma coluna numérica de algum tipo. Nesse caso, a comparação seria bastante trivial. No entanto, poderíamos contornar o problema da seguinte forma:
Aqui, estamos removendo as letras iniciais da coluna de string, convertendo para numérico e, finalmente, fazendo uma
BETWEEN
comparação de intervalo.Parece que os valores comparados são uma espécie de "versões", o que requer "classificação natural". Isso pode ser feito com SQL:
Saída:
Mais em: Como classificar strings de "versão" com SQL no Snowflake?
Alternativamente usando UDF:
Saída: