当前位置: 代码迷 >> Sql Server >> 日期SQL语句!
  详细解决方案

日期SQL语句!

热度:71   发布时间:2016-04-24 09:00:22.0
求一个日期SQL语句!!!

开始时间 startdate(2015-6-17) 、结束时间 enddate(2016-6-17)

求开始时间到结束时间之间每月3号的日期?

求开始时间到结束时间之间每周二的日期?


 

解不出来给点思路吧。
------解决思路----------------------
筛选出每月3号

SELECT * FROM TableName WHERE [Date] BETWEEN StartDate AND EndDate AND SUBSTRING(CONVERT(varchar(10), [Date], 120), 9, 2) = '03'

筛选出星期二

SELECT * FROM TableName WHERE [Date] BETWEEN StartDate AND EndDate AND datename(weekday, [Date]) = '星期二'

------解决思路----------------------
DECLARE @StartDate DATETIME ='2015/05/16';
DECLARE @EndDate DATETIME ='2016/05/16';
DECLARE @Diff INT = DATEDIFF(DAY,@StartDate, @EndDate);
SELECT 
DATEADD(DAY, SV.NUMBER,@StartDate)    AS 'CurrentDate'
,CASE WHEN DATEPART(DAY,DATEADD(DAY, SV.NUMBER,@StartDate) ) =3  THEN  DATEADD(DAY, SV.NUMBER,@StartDate)  ELSE NULL END  AS '3rd of Date'
,CASE WHEN DATENAME(WEEKDAY,DATEADD(DAY, SV.NUMBER,@StartDate) ) ='Tuesday'  THEN  DATEADD(DAY, SV.NUMBER,@StartDate)  ELSE NULL END   AS 'Tuesday'
FROM MASTER.dbo.spt_values   SV
WHERE TYPE ='P'
AND SV.number <= @Diff

------解决思路----------------------
稍微改下大师的就可以了,如下
SET DATEFIRST 1
DECLARE @StartDate DATETIME
SET @StartDate ='2015/05/16';
DECLARE @EndDate DATETIME
SET @EndDate ='2016/05/16';
DECLARE @Diff INT
SET @Diff = DATEDIFF(DAY,@StartDate, @EndDate);
SELECT 
DATEADD(DAY, SV.NUMBER,@StartDate)    AS 'CurrentDate'
,CASE WHEN DATEPART(DAY,DATEADD(DAY, SV.NUMBER,@StartDate) ) =3  THEN  DATEADD(DAY, SV.NUMBER,@StartDate)  ELSE NULL END  AS '3rd of Date'
,CASE WHEN DATEPART(WEEKDAY,DATEADD(DAY, SV.NUMBER,@StartDate) ) =2  THEN  DATEADD(DAY, SV.NUMBER,@StartDate)  ELSE NULL END   AS 'Tuesday'
FROM MASTER.dbo.spt_values   SV
WHERE TYPE ='P'
AND SV.number <= @Diff
  相关解决方案