Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie vergleiche ich die Versionszeichenfolge (x.y.z) in MySQL?

Wenn alle Ihre Versionsnummern wie folgt aussehen:

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

wobei X eine Ganzzahl von 0 bis 255 (einschließlich) ist, dann könnten Sie INET_ATON() verwenden Funktion, um die Strings in Ganzzahlen umzuwandeln, die zum Vergleich geeignet sind.

Bevor Sie die Funktion anwenden, müssen Sie jedoch sicherstellen, dass das Argument der Funktion X.X.X.X ist Form durch Anhängen der erforderlichen Menge '.0' dazu. Dazu müssen Sie zunächst herausfinden, wie viele . 's die Zeichenfolge bereits enthält, was folgendermaßen geschehen kann:

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

Das heißt, die Anzahl der Punkte in der Zeichenfolge ist die Länge der Zeichenfolge minus ihrer Länge nach dem Entfernen der Punkte.

Das erhaltene Ergebnis sollte dann von 3 subtrahiert werden und zusammen mit '.0' , übergeben an REPEAT() Funktion:

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

Dadurch erhalten wir den Teilstring, der an den ursprünglichen ver angehängt werden muss Wert, um mit dem X.X.X.X übereinzustimmen Format. Er wird also seinerseits an CONCAT() übergeben Funktion zusammen mit ver . Und das Ergebnis dieses CONCAT() kann nun direkt an INET_ATON() übergeben werden . Also hier ist, was wir schließlich bekommen:

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

Und das nur für einen Wert! :) Ein ähnlicher Ausdruck sollte für die andere Zeichenfolge konstruiert werden, danach können Sie die Ergebnisse vergleichen.

Referenzen: