动态比较 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 version
、minor version
、build version
和 revision
或任何您想命名的列
【讨论】:
以上是关于动态比较 MySQL 中的版本号的主要内容,如果未能解决你的问题,请参考以下文章
Leetcode刷题100天—165. 比较版本号( 双指针)—day25