SQL查询按日期查找特定记录

时间:2011-04-29 20:15:43

标签: sql date oracle10g

在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。

2 个答案:

答案 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:)