Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm thế nào để so sánh chuỗi phiên bản (x.y.z) trong MySQL?

Nếu tất cả các số phiên bản của bạn giống như bất kỳ số nào sau đây:

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

trong đó X là một số nguyên từ 0 đến 255 (bao gồm), thì bạn có thể sử dụng INET_ATON() hàm để chuyển đổi các chuỗi thành các số nguyên phù hợp để so sánh.

Tuy nhiên, trước khi áp dụng hàm, bạn cần đảm bảo rằng đối số của hàm là của X.X.X.X hình thành bằng cách thêm số lượng cần thiết của '.0' với nó. Để làm điều đó, trước tiên bạn cần tìm ra bao nhiêu . là chuỗi đã chứa, có thể được thực hiện như sau:

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

Nghĩa là, số khoảng thời gian trong chuỗi là độ dài của chuỗi trừ đi độ dài của nó sau khi loại bỏ dấu chấm.

Kết quả thu được sau đó sẽ được trừ cho 3 và cùng với '.0' , được chuyển tới REPEAT() chức năng:

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

Điều này sẽ cung cấp cho chúng tôi chuỗi con phải được nối vào ver ban đầu , để phù hợp với X.X.X.X định dạng. Vì vậy, đến lượt nó, nó sẽ được chuyển đến CONCAT() chức năng cùng với ver . Và kết quả của CONCAT() đó bây giờ có thể được chuyển trực tiếp đến INET_ATON() . Vì vậy, đây là những gì cuối cùng chúng tôi nhận được:

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

Và điều này chỉ dành cho một giá trị! :) Một biểu thức tương tự nên được tạo cho chuỗi còn lại, sau đó bạn có thể so sánh kết quả.

Tài liệu tham khảo:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để dừng một truy vấn MySQL đang chạy?

  2. Làm thế nào để lấy tổng cho mọi giá trị khác biệt trong một cột khác?

  3. MySql count () để trả về 0 nếu không tìm thấy bản ghi

  4. Tắt kiểm tra khóa ngoại trên dòng lệnh

  5. Làm cách nào để thêm 1 giờ vào currrent_timestamp trong mysql, giá trị mặc định là giá trị?