在oracle 10g环境中工作。
假设您被给予:*注意(持续时间以周为单位)
CLASSNAME INSTURCTOR DAYS STARTDATE *DURATION TIMESTART TIMEEND
------------------------- ----------------------- ------------- --------- -------- --------
Power Dance Robert Backman MWF 03-MAR-11 2 0930 1100
Power Dance Lynn Parker MWF 03-MAY-11 2 0930 1100
Power Dance Lynn Parker MTTh 18-MAY-11 2 1230 0100
Club Stretch Kevin Lopez MT 24-OCT-11 3 1930 2015
Club Stretch Kevin Lopez F 17-JUN-11 3 1130 1300
Hatha Yoga Susan Wanzer MW 25-MAY-11 3 1900 2000
用户希望能够在给定特定日期的情况下查询Classname,Instructor,Timestart和TimeEnd。
我了解如何使用(持续时间* 7)+ StartDate查找EndDate。我遇到的麻烦是找出哪些课程在一周的某一天运行。正如用户进入24-JUN-11那样,唯一应该出现的课程应该是Club Stretch。
答案 0 :(得分:0)
这可能只是一个问题的重述问题:您想知道哪些类在指定日期之前开始,并在此指定日期或之后结束。 您已经有了开始日期,并且知道如何计算结束日期。
这将是您的解决方案:
SELECT [columns]
FROM [table]
WHERE @specifiedDate BETWEEN [startDate] AND [calculatedEndDate]
AND [days] LIKE @specifiedWeekday
在寻找星期一时, @specifiedWeekday
应该有这样的值(在MS SQL中):'%M%'
注意:刚刚阅读您在Oracle中的工作。这是SQL Server的答案。我希望它背后的想法可以帮助你。
答案 1 :(得分:0)
在我看来,您需要首先确定星期几存储作为变量,将其提供给第二个到第二个查询。查询下面第一部分的样本:
select to_char(to_date('31-May-2011','dd-Mon-yyyy'),'DAY') from dual
SQL> /
TO_CHAR(T
---------
TUESDAY
或
select to_char(to_date('31-May-2011','dd-Mon-yyyy'),'DY') from dual
TO_
---
TUE
然后你可以用你现在知道的一周的日期将其提供给你的另一个查询。如果您需要将其解码为您提及的格式,则以下代码会将星期几转换为您显示的缩写:
select decode(to_char(to_date('26-May-2011','dd-Mon-yyyy'),'DY'), 'MON','M',
'TUE','T',
'WED','W',
'THU','Th',
'FRI','F',
'SAT','Sa','Su')
from dual
将返回您正在使用的Th:)