Si todos los números de versión se parece a ninguna de estas:
X
X.X
X.X.X
X.X.X.X
donde X es un número entero de 0 a 255 (inclusive), entonces podría usar la función INET_ATON()
para transformar las cadenas en enteros adecuados para la comparación.
Antes de aplicar la función, deberá asegurarse de que el argumento de la función sea del formulario X.X.X.X
al agregarle la cantidad necesaria de '.0'
. Para ello, primero tendrá que averiguar cuántas .
's de la cadena ya contiene, lo que se puede hacer así:
CHAR_LENGTH(ver) - CHAR_LENGTH(REPLACE(ver, '.', '')
Es decir, el número de períodos en la cadena es la longitud de la cadena menos su longitud después de eliminar los puntos.
El resultado obtenido a continuación debe restarse de 3
y, junto con '.0'
, pasa a la función REPEAT()
:
REPEAT('.0', 3 - CHAR_LENGTH(ver) + CHAR_LENGTH(REPLACE(ver, '.', ''))
Esto nos dará la subcadena que debe ser anexa al valor original ver
, para ajustarse con el formato X.X.X.X
. Por lo tanto, a su vez, se pasará a la función CONCAT()
junto con ver
. Y el resultado de ese CONCAT()
ahora se puede pasar directamente al INET_ATON()
. Así que esto es lo que obtenemos con el tiempo:
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 se pueden comparar los resultados.
Referencias:
Es por eso que debe almacenar cadenas como cadenas y números como números – zerkms
¿Los números de versión siempre contienen 3 grupos de números? –
@Salman: No, tendré que comparar 4.2 y 4.2.1 – Eric