Ако всичките ви номера на версиите изглеждат като някое от тези:
X
X.X
X.X.X
X.X.X.X
където X е цяло число от 0 до 255 (включително), тогава можете да използвате INET_ATON()
функция за трансформиране на низовете в цели числа, подходящи за сравнение.
Преди да приложите функцията обаче, ще трябва да се уверите, че аргументът на функцията е от X.X.X.X
формуляр, като добавите необходимото количество '.0'
към него. За да направите това, първо ще трябва да разберете колко .
' е низът, който вече съдържа, което може да се направи по следния начин:
CHAR_LENGTH(ver) - CHAR_LENGTH(REPLACE(ver, '.', '')
Тоест, броят на точките в низа е дължината на низа минус дължината му след премахването на точките.
След това полученият резултат трябва да се извади от 3
и заедно с '.0'
, се предава на REPEAT()
функция:
REPEAT('.0', 3 - CHAR_LENGTH(ver) + CHAR_LENGTH(REPLACE(ver, '.', ''))
Това ще ни даде подниз, който трябва да бъде добавен към оригиналния ver
стойност, за да съответства на X.X.X.X
формат. Така че, от своя страна, той ще бъде предаден на CONCAT()
функция заедно с ver
. И резултатът от това CONCAT()
вече може да се предава директно към INET_ATON()
. Ето какво получаваме в крайна сметка:
INET_ATON(
CONCAT(
ver,
REPEAT(
'.0',
3 - CHAR_LENGTH(ver) + CHAR_LENGTH(REPLACE(ver, '.', ''))
)
)
)
И това е само за една стойност! :) Подобен израз трябва да бъде конструиран и за другия низ, след което можете да сравните резултатите.
Препратки: