Se todos os seus números de versão se parecem com algum destes:
X
X.X
X.X.X
X.X.X.X
onde X é um inteiro de 0 a 255 (inclusive), então você pode usar o
INET_ATON() função para transformar as strings em inteiros aptos para comparação. Antes de aplicar a função, porém, você precisará certificar-se de que o argumento da função seja
X.X.X.X formulário anexando a quantidade necessária de '.0' para isso. Para fazer isso, primeiro você precisa descobrir quantos . 's a string já contém, o que pode ser feito assim:CHAR_LENGTH(ver) - CHAR_LENGTH(REPLACE(ver, '.', '')
Ou seja, o número de pontos na string é o comprimento da string menos seu comprimento após a remoção dos pontos.
O resultado obtido deve então ser subtraído de
3 e, junto com '.0' , passado para o REPEAT() função:REPEAT('.0', 3 - CHAR_LENGTH(ver) + CHAR_LENGTH(REPLACE(ver, '.', ''))
Isso nos dará a substring que deve ser anexada ao
ver original valor, para estar em conformidade com o X.X.X.X formato. Assim, ele será, por sua vez, passado para o CONCAT() função junto com ver . E o resultado desse CONCAT() agora pode ser passado diretamente para INET_ATON() . Então, aqui está o que obtemos eventualmente:INET_ATON(
CONCAT(
ver,
REPEAT(
'.0',
3 - CHAR_LENGTH(ver) + CHAR_LENGTH(REPLACE(ver, '.', ''))
)
)
)
E isso é apenas para um valor! :) Uma expressão semelhante deve ser construída para a outra string, depois você pode comparar os resultados.
Referências: