我的表中有固件版本字符串(例如“ 4.2.2”或“ 4.2.16”)
如何比较,选择或排序它们?
我无法使用标准字符串比较:SQL看到的“ 4.2.2”大于“ 4.2.16”
作为版本字符串,我希望4.2.16大于4.2.2
我想考虑一下固件版本中可以包含chars的原因:4.24a1、4.25b3 …为此,通常,具有chars的子字段具有固定的长度。
如何进行 ?
最终,我找到了对版本字符串进行排序的另一种方法。
在将字符串以可排序的方式存储到数据库之前,我先对其进行了对齐。当我使用python Django框架时,我刚刚创建了一个VersionField,可以在存储时对版本字符串进行“编码”,在读取时对其进行“解码”,因此对于应用程序而言是完全透明的:
这是我的代码:
The justify function : def vjust(str,level=5,delim='.',bitsize=6,fillchar=' '): """ 1.12 becomes : 1. 12 1.1 becomes : 1. 1 """ nb = str.count(delim) if nb < level: str += (level-nb) * delim return delim.join([ v.rjust(bitsize,fillchar) for v in str.split(delim)[:level+1] ]) The django VersionField : class VersionField(models.CharField) : description = 'Field to store version strings ("a.b.c.d") in a way it is sortable' __metaclass__ = models.SubfieldBase def get_prep_value(self, value): return vjust(value,fillchar=' ') def to_python(self, value): return re.sub('\.+$','',value.replace(' ',''))