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

Come confrontare la stringa di versione (x.y.z) in MySQL?

Se tutti i numeri di versione assomigliano a uno di questi:

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

dove X è un numero intero compreso tra 0 e 255 (incluso), allora puoi usare INET_ATON() funzione per trasformare le stringhe in numeri interi adatti al confronto.

Prima di applicare la funzione, però, devi assicurarti che l'argomento della funzione sia di X.X.X.X modulo aggiungendo la quantità necessaria di '.0' ad esso. Per farlo, dovrai prima scoprire quanti . 's la stringa contiene già, che può essere fatto in questo modo:

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

Cioè, il numero di punti nella stringa è la lunghezza della stringa meno la sua lunghezza dopo aver rimosso i punti.

Il risultato ottenuto dovrebbe quindi essere sottratto da 3 e, insieme a '.0' , passato a REPEAT() funzione:

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

Questo ci darà la sottostringa che deve essere aggiunta all'originale ver valore, per conformarsi al X.X.X.X formato. Quindi, a sua volta, verrà passato al CONCAT() funzione insieme a ver . E il risultato di quel CONCAT() ora può essere passato direttamente a INET_ATON() . Quindi ecco cosa otteniamo alla fine:

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

E questo è solo per un valore! :) Un'espressione simile dovrebbe essere costruita per l'altra stringa, in seguito puoi confrontare i risultati.

Riferimenti: