2015-04-28 4 views
0

Например, скажем, у меня есть 5/2/2015 как моя конечная точка. И я хочу знать max(Thursday) перед моей конечной точкой. Как я могу закончить 4/30/2015. Также для этого у меня нет столбца для выбора.SQL - Как выбрать дату за день до определенного времени?

Так что мой WhereClause необходимо указать '5/2/2015'

SQL 2012

+6

Что такое СУБД? –

+0

@ SébastienSevrin 2012 –

+0

Я не знаю, если это только я, но это так же ясно, как грязь для меня. Можете ли вы показать нам, что именно вы после I.e. Какие данные поступают и какие результаты вы хотите получить? –

ответ

1

Вы можете попробовать использовать это время цикла, чтобы добиться того, что вы после:

Declare @Date date = '2015-05-02' 
While DATENAME(WEEKDAY,@Date) <> 'Thursday' 
    begin 
    Set @Date = DATEADD(dd, -1,@Date) 
    end 
Select @Date 
0

Вы может использовать функцию WEEKDAY

SELECT TOP 1 column FROM table 
WHERE WEEKDAY(column) = 5 AND column<'2015-05-02' 
ORDER BY column DESC 
0

Если вам нужно запустить это как часть SELECT, вы можете использовать fo llowing:

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 

С данными выборки:

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 

С переменной:

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 
Смежные вопросы