数据库时间字段定义的是varchar怎么比较大小?

  • Post author:
  • Post category:其他


首先我们可以先使用sql语句

select STRCMP(‘2022-10-26 05:50:44′,’2023-02-15 00:00:00’)

来判断大小,经过结果的取值可以看到字符串的大小比较

字符串比较的时候,从字符串左边开始,一次比较每个字符,直接出现差异、或者其中一个串结束为止。

比如ABC与ACDE比较,第一个字符相同,继续比较第二个字符,由于第二个字符是后面一个串大,所以不再继续比较,结果就是后面个串大。

再如ABC与ABC123比较,比较三个字符后第一个串结束,所以就是后面一个串大。

所以,长度不能直接决定大小,字符串的大小是由左边开始最前面的字符决定的。

compareTo()方法可以实现

单个字符这样比较,若字符串比较长呢??

若a=”a”,b=”b”;则输出-1; 前面ASCII码减后面

若a=”a”,b=”a”则输出0;

若a=”b”,b=”a”则输出1;

若a=“ab”,b=“b”,则输出-1;

若a=“abcdef”,b=”b”则输出-1;

也就是说,如果两个字符串首字母不同,则该方法返回首字母的asc码的差值;

如果首字母相同呢??

若a=“ab”,b=“a”,输出1;  参与比较的一样,那就返回前面长度减后面

若a=“abcdef”,b=”a”输出5;

若a=“abcdef”,b=”abc”输出3;

若a=“abcdef”,b=”ace”输出-1;

即参与比较的两个字符串如果首字符相同,则比较下一个字符,直到有不同的为止,返回该不同的字符的asc码差值,如果两个字符串不一样长,可以参与比较的字符又完全一样,则返回两个字符串的长度差值

如果我们使用的字符串字段来只取年月日的某值的话我们可以使用字符串截取来判断

如SUBSTRING(BIRTHDAY,1,4)取生日的某一年

时间类型的还是用时间创建,varchar一时爽,出了问题就是大问题,不规范!

查考页面:

字符串大小比较的规则?