sql >> Database >  >> RDS >> Mysql

Hoe de versiereeks (x.y.z) in MySQL te vergelijken?

Als al uw versienummers er als volgt uitzien:

X
X.X
X.X.X
X.X.X.X

waarbij X een geheel getal is van 0 tot 255 (inclusief), dan zou je de INET_ATON() kunnen gebruiken functie om de strings om te zetten in gehele getallen die geschikt zijn voor vergelijking.

Voordat u de functie toepast, moet u er echter voor zorgen dat het argument van de functie van de X.X.X.X is. formulier door de benodigde hoeveelheid '.0' . toe te voegen ernaar toe. Om dat te doen, moet je eerst weten hoeveel . 's de string bevat al, wat als volgt kan:

CHAR_LENGTH(ver) - CHAR_LENGTH(REPLACE(ver, '.', '')

Dat wil zeggen, het aantal punten in de tekenreeks is de lengte van de tekenreeks minus de lengte na het verwijderen van de punten.

Het verkregen resultaat moet dan worden afgetrokken van 3 en, samen met '.0' , doorgegeven aan de REPEAT() functie:

REPEAT('.0', 3 - CHAR_LENGTH(ver) + CHAR_LENGTH(REPLACE(ver, '.', ''))

Dit geeft ons de substring die moet worden toegevoegd aan de originele ver waarde, om te voldoen aan de X.X.X.X formaat. Het wordt dus op zijn beurt doorgegeven aan de CONCAT() functie samen met ver . En het resultaat van die CONCAT() kan nu direct worden doorgegeven aan INET_ATON() . Dus dit is wat we uiteindelijk krijgen:

INET_ATON(
  CONCAT(
    ver,
    REPEAT(
      '.0',
      3 - CHAR_LENGTH(ver) + CHAR_LENGTH(REPLACE(ver, '.', ''))
    )
  )
)

En dit is maar voor één waarde! :) Een soortgelijke uitdrukking zou moeten worden geconstrueerd voor de andere string, daarna kun je de resultaten vergelijken.

Referenties:



  1. Escape-tekenreeks voor gebruik bij zoeken in volledige tekst in MySQL

  2. Maak een website met MySQL

  3. Hoe MySQL op macOS te installeren

  4. Hoe de Mysql-database opnieuw te synchroniseren als Master en slave een verschillende database hebben in het geval van Mysql-replicatie?