[英]SQL - How to select a date by day before a specific datetime?
For example, lets say I have 5/2/2015
as my end point. 例如,假设我将
5/2/2015
作为终点。 And I want to know the max(Thursday)
before my end point. 我想知道终点之前的
max(Thursday)
。 How can I end at 4/30/2015
. 我如何在
4/30/2015
结束。 Also for this I do not have a column to select from. 同样为此,我没有一列可供选择。
So my whereclause needs to specify '5/2/2015' 所以我的子句需要指定'5/2/2015'
sql 2012 SQL 2012
You can try using this While loop to achieve what you're after: 您可以尝试使用以下While循环来实现自己的目标:
Declare @Date date = '2015-05-02'
While DATENAME(WEEKDAY,@Date) <> 'Thursday'
begin
Set @Date = DATEADD(dd, -1,@Date)
end
Select @Date
You can use the WEEKDAY function 您可以使用WEEKDAY函数
SELECT TOP 1 column FROM table
WHERE WEEKDAY(column) = 5 AND column<'2015-05-02'
ORDER BY column DESC
If you need to run this as part of a SELECT, you can use the following: 如果需要将其作为SELECT的一部分运行,则可以使用以下命令:
SELECT
CAST(DATEADD(DAY,
CASE
WHEN DATEPART(WEEKDAY, GETDATE()) >= 5
THEN 5 - DATEPART(WEEKDAY, GETDATE())
ELSE ((-2 - DATEPART(WEEKDAY, GETDATE())))
END, GETDATE()) AS DATE) AS PreviousThursday
With sample data: 带有样本数据:
DECLARE @Sample TABLE
(
theDate DATETIME
)
INSERT @Sample
SELECT '20100805' UNION ALL -- Thursday
SELECT '20100806' UNION ALL -- Friday
SELECT '20100807' UNION ALL -- Saturday
SELECT '20100808' UNION ALL -- Sunday
SELECT '20100809' UNION ALL -- Monday
SELECT '20100810' UNION ALL -- Tuesday
SELECT '20100811' UNION ALL -- Wednesday
SELECT '20100812' UNION ALL -- Thursday
SELECT '20100813' UNION ALL -- Friday
SELECT '20100814'
SELECT
DATENAME(WEEKDAY, thedate),
thedate,
DATEADD(DAY,
CASE
WHEN DATEPART(WEEKDAY, theDate) >= 5
THEN 5 - DATEPART(WEEKDAY, theDate)
ELSE ((-2 - DATEPART(WEEKDAY, theDate)))
END, theDate)
FROM @Sample
With a variable: 带有变量:
DECLARE @TheDate DATETIME = '5/2/2015'
SELECT
DATEADD(DAY,
CASE
WHEN DATEPART(WEEKDAY, @TheDate) >= 5
THEN 5 - DATEPART(WEEKDAY, @TheDate)
ELSE ((-2 - DATEPART(WEEKDAY, @TheDate)))
END, @TheDate) AS PreviousThursday
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.