使用SQL选择周

时间:2011-03-12 11:43:52

标签: sql date

我有一个名为“选择周:”的下拉列表,此下拉列表可以有3周的值,即当前周,下周和之后的一周。需要使用SQL语句将这些值更新到下拉列表中。

比如说:今天是2011年12月3日,然后在下拉列表中,选项应如下:03/06/2011 - 03/12/2011(周日至周六) 03/13/2011 - 03/19/2011(周日至周六) 03/20/2011 - 03/26/2011(周日至周六)

我使用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

...

2 个答案:

答案 0 :(得分:1)

在我看来,SQL和GUI之间的依赖性太紧。你对一个糟糕的SQL查询施加了太大的压力。为什么不使用SQL只是从数据库中获取数据,并将所有计算逻辑保留为真正的编程语言?它将使其更易读,更易于维护。这个查询看起来很难看,包含所有字符串连接。

答案 1 :(得分:1)

如果这应该在DB中完成,那么......

只显示weekno的代码。您可以以类似的方式提取每次的开始日期,但是我可能会将它们存储在本地db-table中并选择它们而不是union .e.g: 声明@weeks表(weekno int,启动datetime,结束datetime)

宣布@now datetime; 设置@now = getdate();

声明@previousWeek int; 设置@previousWeek = datepart(week,(dateadd(week,-1,@ now)));

声明@nextWeek int; 设置@nextWeek = datepart(周,(dateadd(周,1,@现)));

声明@weekNow int; 设置@weekNow = datepart(week,@ now);

选择@previousWeek WeekNo 联盟 选择@weekNow 联盟 选择@nextWeek