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: