Pokud všechna vaše čísla verzí vypadají jako některé z těchto:
X
X.X
X.X.X
X.X.X.X
kde X je celé číslo od 0 do 255 (včetně), pak můžete použít INET_ATON() funkce pro transformaci řetězců na celá čísla vhodná pro srovnání.
Před použitím funkce se však musíte ujistit, že argument funkce je X.X.X.X formuláře připojením potřebného množství '.0' k tomu. Chcete-li to provést, musíte nejprve zjistit, kolik je . 's řetězec již obsahuje, což lze provést takto:
CHAR_LENGTH(ver) - CHAR_LENGTH(REPLACE(ver, '.', '')
To znamená, že počet teček v řetězci je délka řetězce mínus jeho délka po odstranění teček.
Získaný výsledek by měl být poté odečten od 3 a spolu s '.0' , předán do REPEAT() funkce:
REPEAT('.0', 3 - CHAR_LENGTH(ver) + CHAR_LENGTH(REPLACE(ver, '.', ''))
Tím získáme podřetězec, který musí být připojen k původnímu ver hodnotu, aby odpovídala X.X.X.X formát. Takže to bude zase předáno CONCAT() fungovat spolu s ver . A výsledek toho CONCAT() lze nyní přímo předat INET_ATON() . Takže tady je to, co nakonec dostaneme:
INET_ATON(
CONCAT(
ver,
REPEAT(
'.0',
3 - CHAR_LENGTH(ver) + CHAR_LENGTH(REPLACE(ver, '.', ''))
)
)
)
A to jen za jednu hodnotu! :) Podobný výraz by měl být vytvořen pro druhý řetězec, poté můžete porovnat výsledky.
Reference: