2011-03-12 53 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