2015-09-04 77 views
0

這應該基於我的日期字段是shipdate如何運行Select語句並讓它從週五到週四返回數據,而無需在日期中進行硬編碼?選擇查詢要顯示數據從星期五到星期四

喜歡的東西

Select * from shippinginfo where shipdate between 'Friday' and 'Thursday' 

對於一個小的清晰度,這是我想達到 where子句應該是週五與前一週的週四之間什麼。因此,例如,本週將是2015年8月28日 - 2015年9月3日,但下週將是2015年9月4日 - 2015年9月10日

+2

這個問題對我沒有意義。所有的日子都在'星期五'和'星期四'之間,因爲沒有定義期限,因此where子句是沒有意義的......你是否想要特定的一週?或一年中的某一週或特定日期之間?哪個星期五和哪個星期四? https://msdn.microsoft.com/en-us/library/ms174420.aspx爲您提供瞭如何在需求更好地定義後執行此操作。 – xQbert

+0

@xQbert在上週的星期五和星期四之間。因此,例如本週它將是2015年8月28日 - 2015年3月9日,但下週將是09/04/2015 - 09/10/2015 –

回答

2

如果你總是希望回到上週五和本週四,您可以使用最新的功能,如下面的時間間隔。

這假定周從星期一開始,如果不是你將不得不調整它一下。

select * from shippinginfo 
where shipdate between dateadd(day, -3, getdate()-datepart(DW, getdate())) 
        and dateadd(day, 4, getdate()-datepart(DW, getdate())) 

的邏輯是:取當前日期和減去工作日的數量,然後或者減去3獲得最後一個星期五或添加4中得到本星期四。

我敢肯定,這可以改善,但它應該給你一個想法。

由於xQbert在評論中提到正確的,這可能會得出不正確的結果,如果你shipdate列是一個日期時間值(由於隨着時間的組件問題),如果是你shoudl要麼修改邏輯或鑄SHIPDATE到date

+0

可能需要在'convert(date,getdate( ))'雖然消除時間。否則日期可能不包括所有需要的記錄。仍然是一個有效的答案:P – xQbert

+0

@xQbert好點,我很懶,只使用'date'作爲類型進行測試,但時間部分會搞砸了。 – jpw

0

對於這個ATLEAST你必須提供的日期,其是星期五(因爲計算機不知道它是星期五)。這個日期的+6是星期四。

對於離: -

步驟1: - 您通過的日期: - 14/08/2015(FRI)

步驟2: - 6日期: - 20/08/2015年(星期四)

注: - 無論ü通過6天增量完成。所以如果你想要星期五作爲第一,然後通過星期五日期。

相關問題