Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana cara membandingkan string versi (x.y.z) di MySQL?

Jika semua nomor versi Anda terlihat seperti ini:

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

di mana X adalah bilangan bulat dari 0 hingga 255 (inklusif), maka Anda dapat menggunakan INET_ATON() berfungsi untuk mengubah string menjadi bilangan bulat yang sesuai untuk perbandingan.

Namun, sebelum Anda menerapkan fungsi, Anda harus memastikan argumen fungsi adalah X.X.X.X formulir dengan menambahkan jumlah '.0' yang diperlukan untuk itu. Untuk melakukannya, pertama-tama Anda harus mencari tahu berapa banyak . 's string sudah berisi, yang dapat dilakukan seperti ini:

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

Artinya, jumlah periode dalam string adalah panjang string dikurangi panjangnya setelah menghapus periode.

Hasil yang diperoleh kemudian harus dikurangi dari 3 dan, bersama dengan '.0' , diteruskan ke REPEAT() fungsi:

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

Ini akan memberi kita substring yang harus ditambahkan ke ver asli nilai, agar sesuai dengan X.X.X.X format. Jadi, pada gilirannya, akan diteruskan ke CONCAT() berfungsi bersama dengan ver . Dan hasil dari CONCAT() sekarang dapat langsung diteruskan ke INET_ATON() . Jadi inilah yang akhirnya kita dapatkan:

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

Dan ini hanya untuk satu nilai! :) Ekspresi serupa harus dibuat untuk string lainnya, setelah itu Anda dapat membandingkan hasilnya.

Referensi:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySql Cursor - Membuat prosedur

  2. MySQL dengan Node.js

  3. MySQL - Apakah mungkin menggunakan LIKE pada semua kolom dalam sebuah tabel?

  4. Mengganti nilai yang diindeks unik

  5. lewati parameter dalam prosedur penyisipan kueri yang disimpan di laravel 4