这几天写代码使用了几个MySQL的函数,发现有些细节还是需要明白的,因为不知这些点浪费了很多时间。
- between <factor1> and <factor2>
限制范围在[factor1,factor2](包括端点),factor1<factor2(否则返回空);
- avg
求平均值的,如果我想求一段时间内某个字段在每一天的平均值(即求n天内这个字段的平均值)应该怎么写呢?注意后面的红色字体部分。例如:table a (tag char,weight int,time date); 有下面的sql语句:select avg(weight) from a where time between time1 and time2 and tag=t; 我以为这句是可以的,你呢?
而实际结果是错误的,因为avg求平均值是根据符合where子句限制的记录数目的,在上面的语句中如果某一个time上没有满足tag=t,那么计算平均值时就不会把该条记录放进来,这样分母就会少了1,所以正确的方法应该是这样的:select sum(weight)/(time2-time1+1) from a where time between time1 and time2 and tag=t;
- adddate(date,factor)
将一个日期类型的字段加上一定的天数,那么如何减去一定的天数呢?这个取决于factor的符号,正的就是加,负的就是减了。
- length()与substring()
前者求长度,后者求子串,那么它们的区别在哪里呢?如果你写成substring('中国',1,1),它会返回什么呢?会是返回‘中’吗,结果返回的是一个'?',这是因为中文长度的计算与英文不同,一个英文字母长度为1,而一个中文字符长度为2(其实在实际的表中跟字段的类型有关的),如果我想返回‘中’应该怎么写呢?我不知道……