Estou tentando usar essa consulta, para filtrar entre os nomes C89 a C110.
SELECT id FROM servers WHERE server_name BETWEEN 'C89' AND 'C110'
Mas isso não funciona. Se eu alterar c89 para c90, ele seleciona pelo menos os dois servidores. É como se estivesse usando apenas os 2 primeiros números no cálculo.
Alguém pode me ajudar ? Estou usando o mariadb 10.5 Estou procurando uma solução que não precise adicionar muitas palavras na consulta. Ser o mais enxuto possível para facilitar a leitura
Uma resposta mais curta:
Ou, se você precisar limitar ao conjunto "C" de servidores:
Ou (para evitar problemas com "24H1"),
Ah, agora vejo outro nome de servidor 'ruim' (
INT1
). Encare isso, você precisa colocar um pouco do fardo no DBA. Ele deve perceber que a maneira prática é dizerOu seja, divida a filtragem em quantos intervalos forem necessários para que as comparações de string funcionem e não pense em números.
Como mencionado nos comentários, ao comparar strings, elas são comparadas lexicograficamente e não numericamente (mesmo quando contêm valores numéricos). O que isso significa é que cada caractere é comparado ao caractere da string de comparação do mesmo índice. Por exemplo, comparar as strings "10" e "3" resultaria em "10" antes de "3" porque "1" vem antes de "3". Não tenho certeza se isso é aplicável ao MariaDB, mas em outros RDBMS você geralmente pode referenciar uma tabela ASCII quando não tiver certeza de qual é a ordenação de um caractere versus outro (observe letras maiúsculas precedidas de minúsculas).
Se todos os servidores
server_name
começarem com a letra 'C', você poderá usar aREPLACE()
função no MariaDB para se livrar do 'C' e, em seguida, converter a string para um INT assim: