mysql 字符串比较 :STRCMP(str1, str2) 和java字符串比较: str1.compareTo(str2) 及软件版本比较

1,mysql字符串比较:STRCMP(str1, str2):

比较两个字符串,如果这两个字符串相等返回0,如果第一个参数是根据当前的排序小于第二个参数顺序返回-1,否则返回1。

注意:

1,"." 小于 0或"0"

2,不能用来比较软件版本大小:

如:v1.0.0.2 实际 小于 v1.0.0.18  但按位比较到第4位时,2就比18大了,

所以 select strcmp("v1.0.0.2","v1.0.0.18") 会返回1

select greatest(a,b,c) 可以查出数值中的最大值,同样也不能比较版本大小

2,java字符串比较:str1.compareTo(str2):

compareTo() 方法用于将 对象与方法的参数进行比较。可用于比较Byte, Double, Integer, Float, Long 或 Short 或String类型的参数。

该方法用于两个相同数据类型的比较,两个不同类型的数据不能用此方法来比较。

注意:

1)"v1.0.0.2".compareTo("v1.0.0.18") 返回1,即不能比较两个版本的大小

2)Integer version1 = 2;

Integer version2 = 25;

int res = version1.compareTo(version2); res值为-1,即可以比较Integer对象

3,比较软件版本大小可以使用如下方法:

注:或版本号v1,v2前带v,要先将v去掉再比较,如v1.0.0.2转成1.0.02再参与比较

    /**
     * 比较v1, v2两个版本的大小,返回值为1,则v1大;返回值为-1,则V2大;返回值为0,则相等
     * @param v1
     * @param v2
     * @return
     */
    public static int compareVersion(String v1, String v2) {
        int res = 0;
        String[] arrV1 = v1.split("\\.");
        String[] arrV2 = v2.split("\\.");
        int minLength = Math.min(arrV1.length, arrV2.length);
        for (int i = 0; i< minLength; i++) {
            int intV1 = Integer.parseInt(arrV1[i]);
            int intV2 = Integer.parseInt(arrV2[i]);
            if(intV1 > intV2) {
                res = 1;
                break;
            }else if(intV1 < intV2) {
                res = -1;
                break;
            }
        }

        if(res == 0) {
            if(arrV1.length > arrV2.length) {
                res = 1;
            }else if(arrV1.length < arrV2.length) {
                res = -1;
            }
        }
        return res;
    }





你可能感兴趣的:(15,mysql,01,JAVA)