sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo comparar la cadena de versión (xyz) en MySQL?

Si todos sus números de versión se parecen a alguno de estos:

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

donde X es un número entero de 0 a 255 (ambos inclusive), entonces podría usar INET_ATON() función para transformar las cadenas en números enteros aptos para la comparación.

Sin embargo, antes de aplicar la función, deberá asegurarse de que el argumento de la función sea X.X.X.X formulario agregando la cantidad necesaria de '.0' lo. Para hacerlo, primero deberá averiguar cuántos . 's la cadena ya contiene, lo que se puede hacer así:

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

Es decir, el número de puntos en la cadena es la longitud de la cadena menos su longitud después de eliminar los puntos.

El resultado obtenido debe luego restarse de 3 y, junto con '.0' , pasado a REPEAT() función:

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

Esto nos dará la subcadena que debe agregarse al ver original valor, para cumplir con el X.X.X.X formato. Entonces, a su vez, se pasará a CONCAT() función junto con ver . Y el resultado de eso CONCAT() ahora se puede pasar directamente a INET_ATON() . Así que esto es lo que finalmente obtenemos:

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

¡Y esto es solo por un valor! :) Se debe construir una expresión similar para la otra cadena, luego puede comparar los resultados.

Referencias: