sql时间查询

查询n天之前的

TO_DAYS(NOW()) - TO_DAYS(time) = ?

查询前n天之内的(包括了今天)

DATE_SUB(CURDATE(), INTERVAL ? DAY) < date(time)

查询本月

DATE_FORMAT(time,'%Y%m') = DATE_FORMAT(CURDATE(),'%Y%m')

查询上个月

DATE_FORMAT(create_time,'%Y-%m') = DATE_FORMAT(DATE_SUB(CURDATE(),INTERVAL 1 MONTH),'%Y-%m')

查询第n个月前的

WHERE PERIOD_DIFF(DATE_FORMAT(NOW(),'%Y%m'), DATE_FORMAT(time,'%Y%m')) = ?

查询n个月之内的

DATE_SUB(CURDATE(), INTERVAL ? MONTH) < time

查询本年

DATE_FORMAT(time,'%Y') = DATE_FORMAT(CURDATE(),'%Y') 
或
YEAR(time)=YEAR(NOW())

昨天数据

date(create_date) = date_sub(curdate(),interval 1 day)

昨天到今天数据

TO_DAYS( NOW( ) ) - TO_DAYS(create_date) <= 1

七天前数据

DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(create_date)

30天前数据

DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= date(create_date)

查询一周数据没有补0     (curdate( )可改为指定时间,则查询指定时间一周数据)

SELECT
                b.weekday as totalDate,b.total
                FROM
                (
                SELECT
                a.weekday,
                 IFNULL(count(nm.id) ,0) as total
                FROM
                (
                SELECT
                date_sub( curdate( ), INTERVAL WEEKDAY( curdate( ) ) - 0 DAY ) AS weekday UNION
                SELECT
                date_sub( curdate( ), INTERVAL WEEKDAY( curdate( ) ) - 1 DAY ) UNION
                SELECT
                date_sub( curdate( ), INTERVAL WEEKDAY( curdate( ) ) - 2 DAY ) UNION
                SELECT
                date_sub( curdate( ), INTERVAL WEEKDAY( curdate( ) ) - 3 DAY ) UNION
                SELECT
                date_sub( curdate( ), INTERVAL WEEKDAY( curdate( ) ) - 4 DAY ) UNION
                SELECT
                date_sub( curdate( ), INTERVAL WEEKDAY( curdate( ) ) - 5 DAY ) UNION
                SELECT
                date_sub( curdate( ), INTERVAL WEEKDAY( curdate( ) ) - 6 DAY ) 
                ) AS a
                LEFT JOIN tmd_snap AS nm ON date_format( nm.create_date, '%Y-%m-%d' ) = a.weekday 
                GROUP BY
                a.weekday 
                ORDER BY 
                a.weekday 
                ) b,
                ( SELECT @rownum /*'*/:=/*'*/ 0 ) r

#统计本月每天计数没有补0

SELECT
    adddate( '2018-03-01', numlist.id ) AS 'date',
    IFNULL( selfinspection.count, 0 ) AS count 
FROM
    (
    SELECT
        n1.id + n10.id * 10 + n100.id * 100 AS id 
    FROM
        tmd_num n1
        CROSS JOIN tmd_num AS n10
        CROSS JOIN tmd_num AS n100 
    ) AS numlist
    LEFT JOIN (
    SELECT
        DATE_FORMAT( create_date, '%Y-%m-%d' ) AS create_date,
        count(*) AS count 
    FROM
        tmd_safety_selfinspection 
    WHERE
        category = "1" 
    GROUP BY
    DATE_FORMAT( create_date, '%Y-%m-%d' )) AS selfinspection ON selfinspection.create_date = adddate( '2018-03-01', numlist.id ) 
WHERE
    adddate( '2018-03-01', numlist.id ) >= date_add( curdate(), INTERVAL - DAY ( curdate()) + 1 DAY ) 
    AND adddate( '2018-03-01', numlist.id ) <= last_day(
    curdate()) 
GROUP BY
    adddate( '2018-03-01', numlist.id ) 
ORDER BY
    adddate( '2018-03-01', numlist.id )

#统计指定月份消费

SELECT
    adddate( '2018-03-01', numlist.id ) AS 'date',
    IFNULL( consumption.breakfast, 0 ) AS breakfast,
    IFNULL( consumption.lunch, 0 ) AS lunch,
    IFNULL( consumption.dinner, 0 ) AS dinner,
    0 + CAST(IFNULL( sum(recharge.recharge_amount) /10, 0 ) AS CHAR)  AS recharge_amount  
FROM
    (SELECT n1.id + n10.id * 10 + n100.id * 100 AS id FROM tmd_num n1
        CROSS JOIN tmd_num AS n10
        CROSS JOIN tmd_num AS n100 
    ) AS numlist
    LEFT JOIN (SELECT
        DATE_FORMAT( consumption.create_date, '%Y-%m-%d' ) AS create_date,
        SUM( CASE `consumption_type` WHEN '0' THEN consumption_amount ELSE 0 END ) AS 'breakfast',
        SUM( CASE `consumption_type` WHEN '1' THEN consumption_amount ELSE 0 END ) AS 'lunch',
        SUM( CASE `consumption_type` WHEN '2' THEN consumption_amount ELSE 0 END ) AS 'dinner' 
    FROM
        tmd_consumption_info AS consumption where consumption.stu_name = '张三' GROUP BY DATE_FORMAT( consumption.create_date, '%Y-%m-%d' )
        ) AS consumption ON consumption.create_date = adddate( '2018-03-01', numlist.id ) 
LEFT JOIN tmd_recharge as recharge on DATE_FORMAT(recharge.create_date,'%Y-%m-%d') = adddate( '2018-03-01', numlist.id ) AND recharge.stu_name = '张三'
WHERE
    adddate( '2018-03-01', numlist.id ) >= '2022-05-01' #开始时间
    AND adddate( '2018-03-01', numlist.id ) <= '2022-05-31' %结束时间
GROUP BY
    adddate( '2018-03-01', numlist.id ) 
ORDER BY
    adddate('2018-03-01',numlist.id)

1.--查询当天: select * from [TABLE] where DateDiff(dd,[dateadd],getdate())=0 2.--查询24小时内的: select * from [TABLE] where DateDiff(hh,[dateadd],getDate())<=24 3.--本记录 SELECT * FROM [TABLE] WHERE datediff(month,[dateadd],getdate())=0 4.--本周记录 SELECT * FROM [TABLE] WHERE datediff(week,[dateadd],getdate())=0 5.--当前系统期、时间 select getdate() 6.--在向指定期加上一段时间的基础上,返回新的 datetime 值(例如:向期加上2天 ) select dateadd(day,2,'2004-10-15') --返回:2004-10-17 00:00:00.000 7.--返回跨两个指定期的期和时间边界数。 select datediff(day,'2004-09-01','2004-09-18') --返回:17 8.--返回代表指定期的指定期部分的整数。 SELECT DATEPART(month, '2004-10-15') --返回 10 9.--返回代表指定期的指定期部分的字符串 SELECT datename(weekday, '2004-10-15') --返回:星期五 10.--day(), month(),year() --可以与datepart对照一下 select 当前期=convert(varchar(10),getdate(),120),当前时间=convert(varchar(8),getdate(),114) 11.--返回星期几 select datename(dw,'2004-10-15') 12.--返回周和星期 select 本年第多少周=datename(week,'2004-10-15'),今天是周几=datename(weekday,'2004-10-15') 13.--计算到2个时间之间间隔的工作和工作小时 CREATE FUNCTION dbo.WORKDAYDIFF(@fromDate datetime, @thruDate datetime) RETURNS int AS BEGIN declare @result int set @fromDate = dateadd(day, case when datepart(weekday, @fromDate); % 7 <= 1 then 2 - datepart(weekday, @fromDate); % 7 else 0 end, @fromDate); set @thruDate = dateadd(day, case when datepart(weekday, @thruDate); % 7 <= 1 then -1 - datepart(weekday, @thruDate); % 7 else 0 end, @thruDate); set @result = datediff(hour,@fromDate,@thruDate); / 24 - datediff(week,@fromDate,@thruDate); * 2 if(@result < 0); set @result = 0 return @result END 14.计算哪一天是本周的星期一 SELECT DATEADD(week, DATEDIFF(week,'1900-01-01',getdate()), '1900-01-01') -- 返回2006-11-06 00:00:00.000 或 SELECT DATEADD(week, DATEDIFF(week,0,getdate()),0) 15.当前季度的第一天 SELECT DATEADD(quarter, DATEDIFF(quarter,0,getdate()), 0) —返回2006-10-01 00:00:00.000 16.如何取得某个的天数 SELECT Day(dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1,0))) —返回28
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值