Oracle查询一段日期内的星期的日期..例如我要查2011-3-18至2011-3-30内所有星期一的日期..应该怎样查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle查询一段日期内的星期的日期..例如我要查2011-3-18至2011-3-30内所有星期一的日期..应该怎样查询相关的知识,希望对你有一定的参考价值。

select tdate, to_char(tdate,'day')
from (
select to_date('2011-03-18','yyyy-mm-dd') + rownum -1 as tdate
from all_objects
where rownum <= to_date('2011-03-30','yyyy-mm-dd') - to_date('2011-03-18','yyyy-mm-dd') + 1
) t
where to_char(tdate,'day') = '星期一'
其中t表是构建你需要的这一个时间段的日期列表, to_char(days,'day')得到的结果是星期几
参考技术A SQL: select to_char(时间,'d'),时间 from table_name where to_char(时间,'d') not in ('2','3','4','5','6')
and 时间 between 2011-3-18 and 2011-3-30
解释
----not in ('2','3','4','5','6')中,1--周日,2--周一,3--周二,4--周三。。。7--周六
参考技术B select * from userinfo p where P.IDATE BETWEEN TO_DATE('2011-03-18','YYYY-MM-DD HH24')
AND TO_DATE('2011-03-30','YYYY-MM-DD HH24')

sql查询获取最近4个星期五的日期

【中文标题】sql查询获取最近4个星期五的日期【英文标题】:sql query to get last 4 friday dates 【发布时间】:2014-08-21 07:00:39 【问题描述】:

我想从下表中获取最近 4 个星期五的日期。取决于用户输入计数将存储在另一个表中,并基于该值我想获取日期。例如,如果计数是 5,我想获取最后 5 个星期五的日期。

---------------------------------------------
  Id        |           fridaydate
---------------------------------------------
   1        |   2014-08-15 11:46:00.000   |

   2        |   2014-08-22 11:46:00.000   |

   3        |   2014-08-08 11:46:00.000   |

   4        |   2014-08-01 11:46:00.000   |

   5        |   2014-07-25 11:46:00.000   |

   6        |   2014-07-18 11:46:00.000   |

   7        |   2014-07-11 11:46:00.000   |

【问题讨论】:

【参考方案1】:

使用以下格式:

DECLARE @D INT= 5    -- User Input value

SELECT TOP (@D) *
FROM YourTable

您可以在存储过程中使用上述查询,如下所示:

Create Procedure YourProcedureName 
  @D int
as Begin
    SELECT TOP (@D) *
    FROM YourTable
    Order by fridaydate Desc
End

【讨论】:

您可以创建过程并将每个值用于顶部命令。【参考方案2】:
SELECT top 5 datefield
FROM table
WHERE lower(datename(dw, datefield))='friday'
GROUP BY datefield
ORDER BY datefield desc

【讨论】:

我尝试了上述查询。我正在重复这些值。我不想重复约会。请帮忙。 嗨,这可能很好地解决了这个问题......但如果你能提供一些关于它如何工作以及为什么工作的解释会很好:) 不要忘记 - 有很多新手在 Stack Overflow 上,他们可以从你的专业知识中学到一两件事——对你来说显而易见的事情对他们来说可能并不那么明显。 @TarynEast 比你找不到的更基本的 SQL。如果一个人不掌握这一点,一个人真的应该做一门课程。为了快速解决问题,我会帮忙解答。 嗨 nire - 我知道 - 这是非常基础的,而且我碰巧知道 SQL,所以我不是在问我,但是 NO,你不能假设有人应该做一门课程。就在上周,我帮助了一个五年级和 Stack Overflow 上的人。这些人在这里欢迎,我们不应该仅仅因为我们碰巧忘记了作为初学者的感觉而排除他们......如果你的SQL是基本的,那么只需要一两句话解释你为什么做了你所做的事情。 如果有人真的对学习感兴趣,他们不会要求快速解决特定问题。如果有人有兴趣学习SQL,我推荐[link]sqlcourse.com【参考方案3】:

这样就可以了:

select ca.*
from dbo.AnotherTable a
    cross apply (
        select top (a.FridayCount) *
        from dbo.FridayTable ft
        where ft.FridayDate <= getdate()
        order by ft.FridayDate desc
    ) ca
where a.UserId = @SomeUserId
order by ca.FridayDate desc;

【讨论】:

我使用了上述所有查询。但我没有得到想要的输出。我的桌子上有三次 2014 年 8 月 22 日。当我执行这些查询时,我会三次获得日期。相反,我只想得到一次。请帮我解决这个问题。提前致谢。 @Mythily, select distinct top (a.FridayCount) ft.FridayDate from dbo.FridayTable ... - ?【参考方案4】:
SELECT TOP @YourCount fridaydate FROM Table ORDER BY Id DESC

【讨论】:

以上是关于Oracle查询一段日期内的星期的日期..例如我要查2011-3-18至2011-3-30内所有星期一的日期..应该怎样查询的主要内容,如果未能解决你的问题,请参考以下文章

Oracle获取一段时间范围内的日期,从2006-01-01到2013-12-31的每一天的日期表

计算日期范围内的星期六和星期日的数量 - oracle [重复]

查询特定日期的 Oracle 数据库

统计日期范围内的天数

返回从最新日期算起的最后 365 内的值 ORACLE SQL

Sql Server 查询一段日期内的全部礼拜天