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: