mysql有丰富的时间函数:
CURRENT_DATE ( ) //当前日期
CURRENT_TIME ( ) //当前时间
CURRENT_TIMESTAMP ( ) //当前时间戳
DATE (datetime ) //返回datetime的日期部分
DATE_FORMAT (datetime ,FormatCodes ) //使用formatcodes格式显示datetime
DAY (date ) //返回日期的天
DAYNAME (date ) //英文星期
DAYOFYEAR (date ) //一年中的第几天
EXTRACT (interval_name FROM date ) //从date中提取日期的指定部分
MAKEDATE (year ,day ) //给出年及年中的第几天,生成日期串
MAKETIME (hour ,minute ,second ) //生成时间串
MONTHNAME (date ) //英文月份名
NOW ( ) //当前时间
SEC_TO_TIME (seconds ) //秒数转成时间
STR_TO_DATE (string ,format ) //字串转成时间,以format格式显示
TIME_TO_SEC (time ) //时间转秒数]
WEEK (date_time [,start_of_week ]) //第几周
YEAR (datetime ) //年份
DAYOFMONTH(datetime) //月的第几天
HOUR(datetime) //小时
LAST_DAY(date) //date的月的最后日期
MICROSECOND(datetime) //微秒
MONTH(datetime) //月
MINUTE(datetime) //分返回符号,正负或0
以上函数仅供参考,详细的可以查看雷雪松的博客.
里上图 表 aaa, ?要按月份查找,a 出现的次数,代码如下
SELECT
CAST(YEAR(rq)?as?varchar)?◆?'-'?◆?CAST(MONTH(rq)?as?varchar)?AS?date,
count(*)?AS?'次数'
FROM?aaa
where?a="a"
GROUP?BY
CAST(YEAR(rq)?as?varchar)?◆?'-'?◆?CAST(MONTH(rq)?as?varchar);
结果如下图,看看是不是你要的
select
*
from
shipmentlist,shipmentscrib
where
(shipmentlist.shipmentlistno=shipmentscrib.shipmentlistno)
and (year(shipmentlist.shipmentdate)=year(now()))
and (month(shipmentlist.shipmentdate)=month(now())
or month(shipmentlist.shipmentdate)=month(now())-1 )
ORDER BY shipmentdate DESC
格式化了一下你的SQL,分析一下.
那么上面的条件.
将变为
其实,对于 查询 当月和上一月
相当于
shipmentlist.shipmentdate = 上月的1号
AND shipmentlist.shipmentdate 下月的1号
LAST_DAY(NOW()) 可以获取 本月的最后一天.
DATE_ADD( LAST_DAY(NOW()) INTERVAL 1 DAY ) 可以获取下月第一天.
最后 SQL 修改为:
AND shipmentlist.shipmentdate DATE_ADD( LAST_DAY(NOW()) INTERVAL 1 DAY )