sql >> Database teknologi >  >> RDS >> Mysql

Hvordan sammenligner man versionsstreng (x.y.z) i MySQL?

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:



  1. 5 måder at implementere case-usensitiv søgning i SQLite med fuld Unicode-understøttelse

  2. MySQL indsættelsesfejl:ER_BAD_FIELD_ERROR:Ukendt kolonne '2525' i 'feltliste'

  3. Forældet MySQL-udvidelse i PHP 5.5.x

  4. Sådan bruger du Access 2019-skærmtip