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 [重复]