2011-03-12 32 views
0

我有一個名爲'Select Week:'的下拉列表,此下拉列表可以有3周的值,即當前周,下週和之後的周。這些值需要使用SQL語句更新到下拉列表中。使用SQL選擇周

對於例如:今天是2011年3月12日,然後在下拉菜單中,選項應該如下:2011年3月6日 - 2011年3月12日(週日至週六) 03/13/2011 - 03/2011(Sun to Sat) 03/20/2011 - 03/26/2011(Sun to Sat)

我已經使用SELECT Case編寫了一小部分代碼。請幫助我瞭解它背後的代碼和正確的邏輯。日Thnx提前任何幫助:)

select case when 
to_char(sysdate,'day') = 'saturday' 
then 
to_char(next_day(sysdate,'sunday')-7,'mm/dd/yyyy') || '-' || to_char 
(next_day(sysdate-1,'saturday'),'mm/dd/yyyy') 
else || '-' || to_char 
(next_day(sysdayte,'saturday'),'mm/dd/yyyy') 
end weeks from dual union .... union 

....

+0

這會更容易在應用端做的事。除非存在依賴於數據庫狀態的條件。 – 2011-03-12 11:49:55

回答

1

在我看來,你有SQL和GUI之間的太緊依賴。您對一個糟糕的SQL查詢施加了太多的壓力。爲什麼不使用SQL只是爲了從數據庫獲取數據,並將所有的計算邏輯都保存爲真正的編程語言?它會使它更易讀易維護。這個查詢看起來非常難看,所有的字符串連接。

+0

@IIYA:是的,這是一種迂迴的做事方式,但這就是我被要求做的事情。任何關於本週計算邏輯的建議都會很棒.Thnx – user656523 2011-03-12 11:57:26

1

如果這應該在DB做,然後...

僅僅展示了weekno的代碼。您可以以類似的方式提取每次的開始日期,但是我可能會將它們存儲在本地db表中,並選擇它們而不是聯合。例如: declare @weeks table(weekno int,starting datetime ,結束日期時間)

declare @now datetime; set @now = getdate();

declare @previousWeek int; set @previousWeek = datepart(week,(dateadd(week,-1,@now)));

declare @nextWeek int; set @nextWeek = datepart(week,(dateadd(week,1,@now)));

declare @weekNow int; set @weekNow = datepart(week,@now);

選擇@previousWeek WeekNo 工會 選擇@weekNow 工會 選擇@nextWeek