Jeśli wszystkie numery wersji wyglądają tak samo:
X
X.X
X.X.X
X.X.X.X
gdzie X jest liczbą całkowitą od 0 do 255 (włącznie), wtedy możesz użyć INET_ATON()
funkcja do przekształcenia łańcuchów na liczby całkowite nadające się do porównania.
Zanim jednak zastosujesz funkcję, musisz upewnić się, że argument funkcji ma wartość X.X.X.X
formularz, dołączając niezbędną ilość '.0'
do niego. Aby to zrobić, musisz najpierw dowiedzieć się, ile .
ten ciąg już zawiera, co można zrobić w następujący sposób:
CHAR_LENGTH(ver) - CHAR_LENGTH(REPLACE(ver, '.', '')
Oznacza to, że liczba kropek w ciągu to długość ciągu pomniejszona o jego długość po usunięciu kropek.
Otrzymany wynik należy następnie odjąć od 3
i wraz z '.0'
, przekazany do REPEAT()
funkcja:
REPEAT('.0', 3 - CHAR_LENGTH(ver) + CHAR_LENGTH(REPLACE(ver, '.', ''))
To da nam podłańcuch, który musi być dołączony do oryginalnego ver
wartość, aby była zgodna z X.X.X.X
format. Tak więc zostanie on z kolei przekazany do funkcji CONCAT()
działać wraz z ver
. I wynik tego CONCAT()
można teraz bezpośrednio przekazać do INET_ATON()
. Oto, co ostatecznie otrzymujemy:
INET_ATON(
CONCAT(
ver,
REPEAT(
'.0',
3 - CHAR_LENGTH(ver) + CHAR_LENGTH(REPLACE(ver, '.', ''))
)
)
)
I to tylko dla jednej wartości! :) Podobne wyrażenie powinno być skonstruowane dla drugiego ciągu, po czym możesz porównać wyniki.
Referencje: