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: