mysql中的集合函数有:count(),sum(),avg(),min(),max(),时间和日期函数等。

1.   1) select count(*) from xindi where phone=123456;//计算表xindi中phone=123456的个数 或者 select count(phone)from xindi where phone=123456;

   2)select count(phone)from xindi; //phone 列的数目

   3)select count(distinct phone)from xindi;//有多少个不同种类的电话

    4)如果种类phone出现了不止一次,它将只被计算一次。关键字DISTINCT 决定了只有互不相同的值才被计算。

通常,当你使用COUNT()时,字段中的空值将被忽略,不算入内。

另外,COUNT()函数通常和GROUP BY子句配合使用,例如可以这样返回每种phone的数目:

select phone, count(phone) from xindi group by phone;

5)select avg(phone)from xindi; // 在计算平均时,忽略空值,phone共四个值,两个空值,除以时只除2.

select name,avg(phone) from xindi group by(name); // 计算每个名字的phone 的平均值

6)select sum(phone) from xindi;

   Select name, sum(phone) group by (name);

7)极值:

Select min(phone)from xindi;

Select name,min(phone)from xindi;//这是错误的sql语句,因为集合函数不能和非分组的列混合使用,上述name未分组。所以应用下面的语句:

select name,min(phone) from xindi group by name;

2.操作时间和日期:日期和时间类型:DATETIME、DATE、TIMESTAMP、TIME和YEAR这5种类型的每一个都有合法值的一个范围,而“零”当你指定确实不合法的值时被使用。

a. 当前日期 select curdate();select curdate()+0;

   当前时间 select curtime();select curtime()+0;

b. 自动记录数据的改变时间:

     TIMESTAMP类型提供一种类型,TIMESTAMP值可以从1970的某时的开始一直到2037年,精度为一秒,其值作为数字显示。你可以使用它自动地用当前的日期和时间标记INSERT或UPDATE的操作。

mysql> CREATE TABLE student

-> (

-> id int,

-> name char(16),

-> time timestamp

-> );

向表中插入记录,可以查看效果:

Insert student values(1,’jim’,null);

select *from student;

update student set name=’lan’where id=1;

select*from student; //time的值会改变

有时希望不更改任何值,也能达到修改timestamp列的值,这时设置该列的值为null,mysql就可以自动更新timestamp的值:

Update student set time=null where id=1;

Select*from student ;//这时timestamp的值已改变

如果,当你创建一个行时,你想要一个TIMESTAMP被设置到当前的日期和时间,但在以后无论何时行被更新时都不改变,可以这样

Update student set name=’yun’,time=time where id=1;

Select *from student where id=1;

TIMESTAMP的存储需求是4字节,而DATETIME列的存储需求是8字节。

c.返回时间和日期

mysql> SELECT * FROM weblog WHERE entrydate>="2001-02-08" AND entrydate<"2001-02-09" ;

或者 mysql> SELECT * FROM weblog WHERE entrydate LIKE '2001-02-08%' ;

注:LIKE运算符和模式匹配,是通过比较串值进行的,因此必须使用标准的时间书写格式,YYYY-MM-DD HH-MM-SS

d. 比较日期和时间:

mysql> SELECT FROM_DAYS(729669); -> '1997-10-07'
 
 TO_DAYS(date) 给出一个日期 date,返回一个天数(从 0 年开始的天数): mysql> SELECT TO_DAYS(950501); -> 728779 mysql> SELECT TO_DAYS('1997-10-07'); -> 729669
TO_DAYS()  无意于使用先于格里高里历法(即现行的阳历)(1582)出现的值,因为它不考虑当历法改变时所遗失的天数。
 
FROM_DAYS(N) 给出一个天数 N,返回一个 DATE 值:
返回2个时间相差的天数

select to_days(now())-to_days('20100510');


3. 字符串模式匹配:

SQL的模式匹配允许你使用 “_”匹配任何单个字符,而“%”匹配任意数目字符(包括零个字符)。在MySQL中,SQL的模式缺省是忽略大小写的。

select*from xindi where name like "l%i";

select*from xindi where name like " %i";

select*from xindi where name like "l% ";

select*from xindi where name like "l___";//l后面有三个字符的

mysql> SELECT * FROM pet WHERE name REGEXP "^[bB]";

mysql> SELECT * FROM pet WHERE name REGEXP "fy$";

mysql> SELECT * FROM pet WHERE name REGEXP "[wW]";

mysql> SELECT * FROM pet WHERE name REGEXP "^.....$";//重复5次(有5个字符)

mysql> SELECT * FROM pet WHERE name REGEXP "^.{5}$"; //重复5次(有5个字符)

最后修改:2012 年 03 月 02 日
卧槽,全是白嫖客,服务器不要钱吗?