Se tutti i numeri di versione assomigliano a uno di questi:
X
X.X
X.X.X
X.X.X.X
dove X è un numero intero compreso tra 0 e 255 (incluso), quindi è possibile utilizzare la funzione INET_ATON()
per trasformare le stringhe in numeri interi adatti per il confronto.
Prima di applicare la funzione, tuttavia, è necessario assicurarsi che l'argomento della funzione sia del modulo X.X.X.X
aggiungendo la quantità necessaria di '.0'
ad esso. Per fare questo, è necessario prima di scoprire come s' la stringa contiene già, molti .
che può essere fatto in questo modo:
CHAR_LENGTH(ver) - CHAR_LENGTH(REPLACE(ver, '.', '')
Cioè, il numero di periodi nella stringa è la lunghezza del stringa meno la sua lunghezza dopo aver rimosso i punti.
Il risultato ottenuto deve poi essere sottratta dal 3
e, insieme con '.0'
, passato alla funzione REPEAT()
:
REPEAT('.0', 3 - CHAR_LENGTH(ver) + CHAR_LENGTH(REPLACE(ver, '.', ''))
Questo ci darà la stringa che deve essere aggiunto al valore originale ver
, di conformarsi con il formato X.X.X.X
. Quindi, a sua volta, passerà alla funzione CONCAT()
insieme a ver
. E il risultato di quello CONCAT()
può ora essere passato direttamente a INET_ATON()
. Quindi ecco cosa otteniamo alla fine:
INET_ATON(
CONCAT(
ver,
REPEAT(
'.0',
3 - CHAR_LENGTH(ver) + CHAR_LENGTH(REPLACE(ver, '.', ''))
)
)
)
E questo è solo per un valore! :) Un'espressione simile dovrebbe essere costruita per l'altra stringa, in seguito è possibile confrontare i risultati.
Riferimenti:
Ecco perché è necessario memorizzare stringhe come stringhe e numeri come numeri – zerkms
I numeri di versione contengono sempre 3 gruppi di numeri? –
@ Salman: No Potrei dover confrontare 4.2 e 4.2.1 – Eric