我有一个名为“选择周:”的下拉列表,此下拉列表可以有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
...
答案 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