Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment comparer la chaîne de version (x.y.z) dans MySQL ?

Si tous vos numéros de version ressemblent à l'un de ces éléments :

X
X.X
X.X.X
X.X.X.X

où X est un entier de 0 à 255 (inclus), alors vous pouvez utiliser le INET_ATON() fonction pour transformer les chaînes en nombres entiers aptes à la comparaison.

Avant d'appliquer la fonction, cependant, vous devez vous assurer que l'argument de la fonction est du X.X.X.X formulaire en ajoutant la quantité nécessaire de '.0' à cela. Pour ce faire, vous devez d'abord savoir combien de . est la chaîne contient déjà, ce qui peut être fait comme ceci :

CHAR_LENGTH(ver) - CHAR_LENGTH(REPLACE(ver, '.', '')

Autrement dit, le nombre de points dans la chaîne est la longueur de la chaîne moins sa longueur après suppression des points.

Le résultat obtenu doit alors être soustrait de 3 et, avec '.0' , passé à REPEAT() fonction :

REPEAT('.0', 3 - CHAR_LENGTH(ver) + CHAR_LENGTH(REPLACE(ver, '.', ''))

Cela nous donnera la sous-chaîne qui doit être ajoutée au ver d'origine valeur, pour se conformer au X.X.X.X format. Ainsi, il sera à son tour passé au CONCAT() fonction avec ver . Et le résultat de ce CONCAT() peut maintenant être passé directement à INET_ATON() . Voici donc ce que nous obtenons finalement :

INET_ATON(
  CONCAT(
    ver,
    REPEAT(
      '.0',
      3 - CHAR_LENGTH(ver) + CHAR_LENGTH(REPLACE(ver, '.', ''))
    )
  )
)

Et ce n'est que pour une valeur ! :) Une expression similaire doit être construite pour l'autre chaîne, après quoi vous pourrez comparer les résultats.

Références :