Hvis alle dine versionsnumre ligner nogen af disse:
X
X.X
X.X.X
X.X.X.X
hvor X er et heltal fra 0 til 255 (inklusive), så kan du bruge INET_ATON()
funktion til at transformere strengene til heltal, der er egnet til sammenligning.
Før du anvender funktionen, skal du dog sikre dig, at funktionens argument er af X.X.X.X
formular ved at tilføje den nødvendige mængde '.0'
til det. For at gøre det skal du først finde ud af, hvor mange .
's strengen allerede indeholder, hvilket kan gøres sådan her:
CHAR_LENGTH(ver) - CHAR_LENGTH(REPLACE(ver, '.', '')
Det vil sige, at antallet af perioder i strengen er længden af strengen minus dens længde efter at have fjernet punkterne.
Det opnåede resultat skal derefter trækkes fra 3
og sammen med '.0'
, videregivet til REPEAT()
funktion:
REPEAT('.0', 3 - CHAR_LENGTH(ver) + CHAR_LENGTH(REPLACE(ver, '.', ''))
Dette vil give os den understreng, der skal føjes til den originale ver
værdi, for at være i overensstemmelse med X.X.X.X
format. Så det vil på sin side blive videregivet til CONCAT()
fungerer sammen med ver
. Og resultatet af den CONCAT()
kan nu sendes direkte til INET_ATON()
. Så her er hvad vi får til sidst:
INET_ATON(
CONCAT(
ver,
REPEAT(
'.0',
3 - CHAR_LENGTH(ver) + CHAR_LENGTH(REPLACE(ver, '.', ''))
)
)
)
Og dette er kun for én værdi! :) Et lignende udtryk bør konstrueres for den anden streng, bagefter kan du sammenligne resultaterne.
Referencer: