2009-07-19 5 views
2

저는 현재 첫날입니다. 이번 주와 지난주에 vbscript 기능이있는 2/12/2009 형식입니다. SQL 쿼리로 가능한지 궁금 해서요.첫날 이번 주 및 지난 주

+1

당신이주의 첫날 무엇을 생각 하는가? 어떤 이들은 일요일에, 다른 사람들은 월요일에 (그리고 다른 사람들은 다른 것을 말할지도 모른다고) 말하고있다. SQL Server의 모든 응용 프로그램에 동일한 대답이있는 것은 아니므로 SELECT @@ DATEFIRST로 확인하거나 SET DATEFIRST를 사용하여 변경하십시오. – RBarryYoung

답변

7

이러한 문은 TSQL에서 원하는 것을 수행해야합니다. 명령문은 현재 날짜를 기반으로합니다.

Select dateadd(wk, datediff(wk, 0, getdate()) - 1, 0) as LastWeekStart 
Select dateadd(wk, datediff(wk, 0, getdate()), 0) as ThisWeekStart 
Select dateadd(wk, datediff(wk, 0, getdate()) + 1, 0) as NextWeekStart 

다른 date routines here 많이있다 : 당신은 당신이 원하는대로 날짜 GETDATE()를 대체 할 수 있습니다.

+2

좋은 답변, Ben. 독자는 이것이 SET DATEFIRST에 정의 된대로 (그리고 SELECT @@ DATEFIRST와 같이)이주의 첫날을 반환하지만 독자가 예상하는 것과 같을 수도 있고 그렇지 않을 수도 있음을 알아야합니다. – RBarryYoung

+0

@R 배리 영 - 아주 좋은 지적입니다. 이것을 불러 주셔서 감사합니다. –

+0

George가 아래에서 언급했듯이 날짜의 datepart 값이 DateFirst 값과 같으면 대답이 잘못되었습니다. Ben의 대답은 현재 날짜가 DateFirst 값과 같을 경우에만 작동합니다. 지난 일요일의 날짜를 사용하여 또 다른 예 : DATEFIRST 1 SET를 \t DATEADD SELECT (DAY 1 -/29/2015 '11, DATEPART (WEEKDAY를 '), '11// 2015 29') CorrectThisWeekStart AS, \t \t DATENAME (WEEKDAY , '11/2,015/29 ') SET DATEFIRST 7 SELECT \t DATEADD (DAY - 1 DATEPART (평일/29/2015'11 '), '11/2015'/ 29) CorrectThisWeekStart AS, \t \t DATENAME (WEEKDAY, '11/29/2015 ') – SQLGuyChuck

2

오늘의 일요일이 맞으면 벤의 답은 틀린 답을줍니다. 첫 번째 요일이 일요일인지 월요일인지에 관계없이 현재 날짜가 현재 주에 포함되어야합니다. 2013 년 3 월 24 일에 코드를 실행하면 2013 년 3 월 25 일 ThisWeekStart가 제공됩니다. 다음 코드를 대신 사용했습니다. SELECT DATEADD (DAY, 1 - DATEPART (DW, '3/24/2013'), '3/24/2013')

+4

답변에 주석으로 추가하거나 추가 답변을 연장하는 대신 전체 답변을 포함하십시오. 당신의 대답은 고립되어 서 있어야합니다. 그대로, 나는 당신이 말하는 것을 알기 위해 "벤의 대답"을 봐야합니다. –

관련 문제