DATEDIFF( datepart , startdate , enddate )
startdate=日期字段名称
--查询 今日
select * from tableA where DateDiff(dd,datetime类型字段,getdate())= 0
--查询 昨日
select * from tableA where DateDiff(dd,times,getdate())= 1
--查询 本周
select * from tableA where DateDiff(dd,VoucherDate,getdate())<=7
--查询 上周
select * from tableA where DateDiff(dd,VoucherDate,getdate())>7 and DateDiff(dd,VoucherDate,getdate())<=14
--查询 本月
select * from tableA where DateDiff(mm,VoucherDate,getdate())= 0
--查询 上月
select * from tableA where DateDiff(mm,VoucherDate,getdate())= 1
--查询 本年
select * from tableA where DateDiff(yy,VoucherDate,getdate())= 0
--查询 上一年
select * from tableA where DateDiff(yy,VoucherDate,getdate())= 1
这个需求可以通过查出顾客表中与日报表的差集来实现。先假设数据结构如下
顾客信息表(顾客id,姓名)
日报表(id,顾客id,日期)
若这两张表的顾客id字段上设置了索引,可以使用下列sql语句,运行效率很高的
select a.顾客id,a.姓名 from 顾客信息表 a
where not exists (select 1 from 日报表 b
where b.顾客id=a.顾客id and b.日期>=
convert(varchar(10),getdate()-6,120) and
b.日期<convert(varchar(10),getdate()+1,120))
如果数据表很大,且没有可利用的索引则建议运行下列sql语句
select a.顾客id,a.姓名 from 顾客信息表 a
left join
(select distinct 顾客id from 日报表 where
日期>=convert(varchar(10),getdate()-6,120)
and 日期<convert(varchar(10),getdate()+1,120)) b on a.顾客id=b.顾客id
where b.顾客id is null
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)