Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como comparar a string de versão (x.y.z) no MySQL?


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: