sql >> Databasteknik >  >> RDS >> Mysql

Hur jämför man versionssträng (x.y.z) i MySQL?

Om alla dina versionsnummer ser ut som något av dessa:

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

där X är ett heltal från 0 till 255 (inklusive), då kan du använda INET_ATON() funktion för att omvandla strängarna till heltal lämpliga för jämförelse.

Innan du använder funktionen måste du dock se till att funktionens argument är av X.X.X.X formuläret genom att lägga till den nödvändiga mängden '.0' till det. För att göra det måste du först ta reda på hur många . s strängen redan innehåller, vilket kan göras så här:

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

Det vill säga att antalet punkter i strängen är strängens längd minus dess längd efter att punkterna tagits bort.

Det erhållna resultatet ska sedan subtraheras från 3 och tillsammans med '.0' , skickas till REPEAT() funktion:

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

Detta ger oss delsträngen som måste läggas till den ursprungliga ver värde, för att överensstämma med X.X.X.X formatera. Så den kommer i sin tur att skickas till CONCAT() fungerar tillsammans med ver . Och resultatet av den CONCAT() kan nu skickas direkt till INET_ATON() . Så här är vad vi får så småningom:

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

Och detta är bara för ett värde! :) Ett liknande uttryck bör konstrueras för den andra strängen, efteråt kan du jämföra resultaten.

Referenser:



  1. Hur man inte visar dubbletter i SQL

  2. Skicka hyresgäst-id via sql-serveranslutning

  3. Multi-cloud-distribution för MySQL-replikering

  4. Bestäm om Oracle-dejten är på en helg?