日期:2014-05-16  浏览次数:20700 次

mysql使用笔记
select distinct Code , Date(BeginTime) as AtDate
from Session
where DATE_SUB(CURDATE(), INTERVAL 1 MONTH) = date(BeginTime)


date()
返回时间中的日期

DATE_SUB(CURDATE(), INTERVAL 1 MONTH)
当前日期减去1个月

distinct 去掉重复数据

------------------------------------------------------
show processlist 中的ID栏显示。
KILL [CONNECTION | QUERY] thread_id

每个与mysqld的连接都在一个独立的线程里运行,您可以使用SHOW PROCESSLIST语句查看哪些线程正在运行,并使用KILL thread_id语句终止一个线程。
------------------------------------------------------

select BeginTime , Count(distinct code)
from Session s1
where To_days(BeginTime) >= To_days('2011-01-14')
                and To_days(BeginTime) <= To_days('2011-02-14')
                and AppCode = 'StoneAge'
                and code in
                (
                    select distinct code
                    from Session s2
                    where To_days(s2.BeginTime) <= To_days(s1.BeginTime) - 1
                          and To_days(s2.BeginTime) >= To_days(s1.BeginTime) - 1
                 )
group by To_days(BeginTime)

To_days(s2.BeginTime)
返回日期的天数

update Card set expiration=date_add(bindDate , interval 1 year)
where expiration='0000-00-00'

date_add(bindDate , interval 1 year)
当前日期加1年

select * from role
where id between 2 and 3

查询两个数之间的数据,但包括ID为2和ID为3的数据

select TIME_TO_SEC(TIMEDIFF('2011-03-03 23:23:23' ,'2011-02-01 23:23:23'))

TIMEDIFF(expr,expr2)

TIMEDIFF() 返回起始时间 expr 和结束时间expr2 之间的时间。 expr 和expr2 为时间或 date-and-time 表达式,两个的类型必须一样。

mysql> SELECT TIMEDIFF('2000:01:01 00:00:00',

    ->                 '2000:01:01 00:00:00.000001');

    -> '-00:00:00.000001'

mysql> SELECT TIMEDIFF('1997-12-31 23:59:59.000001',

    ->                 '1997-12-30 01:01:01.000002');

    -> '46:58:57.999999'

TIME_TO_SEC(time)

返回已转化为秒的time参数。

mysql> SELECT TIME_TO_SEC('22:23:00');

        -> 80580

mysql> SELECT TIME_TO_SEC('00:39:38');

        -> 2378


周统计
select DATE_FORMAT(incomingTime,'%x %v') as weekCount , count(0) as dateCount , min(date(incomingTime)) as minDate , max(date(incomingTime)) as maxDate 
from CallHistory WHERE uid <> '000.000' and date(incomingTime) <= '2011-09-04' and date(incomingTime) >= '2008-07-28' 
GROUP BY weekCount 
order by incomingTime

----下面是没有经过测试的--------------------------------------------------

    * TIMESTAMP(expr) , TIMESTAMP(expr,expr2)

对于一个单参数,该函数将日期或日期时间表达式 expr 作为日期时间值返回.对于两个参数, 它将时间表达式 expr2 添加到日期或日期时间表达式 expr 中,将theresult作为日期时间值返回。

mysql> SELECT TIMESTAMP('2003-12-31');

        -> '2003-12-31 00:00:00'

mysql> SELECT TIMESTAMP('2003-12-31 12:00:00','12:00:00');

        -> '2004-01-01 00:00:00'

    * TIMESTAMPADD(interval,int_expr,datetime_expr)

将整型表达式int_expr 添加到日期或日期时间表达式 datetime_expr中。 int_expr 的单位被时间间隔参数给定,该参数必须是以下值的其中一个: FRAC_SECOND、SECOND、 MINUTE、 HOUR、 DAY、 WEEK、 MONTH、 QUARTER或 YEAR。

可使用所显示的关键词指定Interval值,或使用SQL_TSI_前缀。例如, DAY或SQL_TSI_DAY 都是正确的。

mysql> SELECT TIMESTAMPADD(MINUTE,1,'2003-01-02');

  &nb