动态比较 MySQL 中的版本号

Posted

技术标签:

【中文标题】动态比较 MySQL 中的版本号【英文标题】:Dynamically compare version numbers in MySQL 【发布时间】:2021-09-18 17:51:12 【问题描述】:

我想像这样比较 mysql 中的不同版本:

select * from version_table where version > 5.2.9

version 列的值可以是 5.2.8、5.2.11、5.2.9.2、5.3

目前上面写的select 不返回值为'5.2.11'的行

我看到很多解决方案在版本之间进行静态比较,所有版本都具有相同的结构,例如 X.XX 或 X.XX.XX,但是如果我的所有版本都有不同的结构并且在 X.XX、X 之间变化怎么办.XX.XX 和 X.XX.XX.XX?

【问题讨论】:

必须引用引用字符串文字。字符串值必须转换为带有零填充的实心形式 (5.2.9 => 5020900)。 这能回答你的问题吗? MySQL query - compare version numbers 【参考方案1】:

发生这种情况是因为您比较的是 VARCHAR 数据类型,而不是 INT

比较数值数据类型时,9 小于 11。 但是当你比较时,我会说,字符串数据类型就不是这样了。因为5.2. 在每种情况下都是相同的,它会再次比较 9 和 11,所以基本上它会比较第一个字符,这意味着它比较 9 和 1。你猜 1 它小于 9,如果你尝试where version < 5.2.9 它会给你5.2.11

注意:这个where 查询在实际逻辑上是不正确的。

也许解决方案可以拆分为更多列,例如 major versionminor versionbuild versionrevision 或任何您想命名的列

【讨论】:

以上是关于动态比较 MySQL 中的版本号的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode刷题100天—165. 比较版本号( 双指针)—day25

Leetcode刷题100天—165. 比较版本号( 双指针)—day25

iOS 比较版本号大小的方法

如何比较 Python 中的版本号?

如何比较 Python 中的版本号?

查看MySQL的版本号