使用SQL选择周

使用SQL选择周,sql,date,Sql,Date,我有一个名为“选择周”的下拉列表,该下拉列表的值可以是3周,即当前周、下周和之后的一周。需要使用SQL语句将这些值更新到下拉列表中 例如:今天是2011年3月12日,那么在下拉列表中,选项应该如下:2011年3月6日-2011年3月12日(太阳到周六) 2011年3月13日-2011年3月19日(太阳至周六) 2011年3月20日至2011年3月26日(太阳至周六) 我已经使用selectcase编写了一小部分代码。请帮我理解代码和正确的逻辑。Thnx提前获得任何帮助:) 在我看来,SQL和GU

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

例如:今天是2011年3月12日,那么在下拉列表中,选项应该如下:2011年3月6日-2011年3月12日(太阳到周六) 2011年3月13日-2011年3月19日(太阳至周六) 2011年3月20日至2011年3月26日(太阳至周六)

我已经使用selectcase编写了一小部分代码。请帮我理解代码和正确的逻辑。Thnx提前获得任何帮助:)


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

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

只是显示weekno的代码。您可以以类似的方式提取每次的开始-结束日期,但我可能会将它们存储在本地db表中,并在联合的末尾选择它们。例如: 声明@weeks表(weekno int、开始日期时间、结束日期时间)

声明@now datetime; 设置@now=getdate()

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

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

声明@weekNow int; 设置@weekNow=datepart(周,现在)

选择@previousweekno 联盟 选择@weekNow 联盟
选择@nextWeek

这将更容易在应用程序端执行。除非有一个依赖于数据库状态的条件。@IIya:是的,这是一种非常迂回的方式,但我被要求这样做。任何关于本周计算逻辑的建议都很好。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