我有一个应用程序版本,比如2.15.3。
我有应用程序的模块版本,以应用程序版本的前两个字符开头。因此,模块版本可能为2.15.1.8。
模块版本号存储为一个名为version的varchar列。
只有在以下两个条件成立的情况下,模块才能与应用程序版本一起工作:
- 模块的第一个数字=应用程序的第一个编号
- 模块的第二个数字<=应用程序的第二个数字
我希望能够从一个表中选择符合上述两个规则的所有模块。
因此,对于应用程序2.15.3,它应该返回2.15.1.8,但不是2.16.1.2,也不是1.14.1.2。
我该怎么做?
我相信我已经找到了一种方法(尽管我愿意接受批评):
SELECT *
FROM my_table
WHERE substring_index(version, '.', 1) = :APP_NUM_ONE
AND substring_index(substring_index(version, '.', 2), '.', -1) <= :APP_NUM_TWO;
其中,在此场景中:APP_NUM_ONE=2,并且:APP_NUM _TWO=15。