如何用SQL返回两个日期之间的所有连续日期
-------------------------------------------
在层次查询中,Oracle引入了一个伪列level,用来表示当前行(节点)对应的level,
它从1开始计数,每多一层level的值就加1。
我们可以据此实现对两个日期/整数之间所有日期/整数的遍历。
----------------------------------------------------------
SQL> create table test (begin_date date,end_date date);
Table created
SQL> insert into test values(trunc(sysdate),trunc(sysdate+5));
1 row inserted
SQL> select * from test;
BEGIN_DATE END_DATE
----------- -----------
2010-4-6 2010-4-11
SQL> select begin_date,end_date,begin_date+level -1 as today
2 from test
3 connect by begin_date + level -1 <= end_date;
BEGIN_DATE END_DATE TODAY
----------- ----------- -----------
2010-4-6 2010-4-11 2010-4-6
2010-4-6 2010-4-11 2010-4-7
2010-4-6 2010-4-11 2010-4-8
2010-4-6 2010-4-11 2010-4-9
2010-4-6 2010-4-11 2010-4-10
2010-4-6 2010-4-11 2010-4-11
6 rows selected
------------------------------------------------------------------插入两条记录,看该查询语句是否可行
SQL> insert into test values(trunc(sysdate+4),trunc(sysdate+7));
1 row inserted
SQL> select * from test;
BEGIN_DATE END_DATE
----------- -----------
2010-4-6 2010-4-11
2010-4-10 2010-4-13
SQL> select distinct begin_date+level-1 as today
2 from test
3 connect by begin_date+level-1 <= end_date;
TODAY
-----------
2010-4-7
2010-4-13
2010-4-8
2010-4-11
2010-4-9
2010-4-6
2010-4-10
2010-4-12
8 rows selected
--------------------------------------- 根据最大和最小值得查询
SQL> delete from test where begin_date = to_date('2010-4-10','yyyy-mm-dd');
1 row deleted
SQL> select * from test;
BEGIN_DATE END_DATE
----------- -----------
2010-4-6 2010-4-11
SQL> SELECT one_date
2 FROM (SELECT start_date + level - 1 one_date
3 FROM (SELECT min(begin_date) start_date, max(end_date) end_date
4 FROM test) test
5 connect BY start_date + level - 1 <= end_date ) all_date,
6 test
7 WHERE one_date BETWEEN begin_date AND end_date;
ONE_DATE
-----------
2010-4-6
2010-4-7
2010-4-8
2010-4-9
2010-4-10
2010-4-11
6 rows selected
分享到:
相关推荐
例如,我们可以使用`LocalDate`来表示一个特定的日期,并使用`Period`或`Duration`来表示两个日期之间的间隔。 在SQL查询中,连续日期周期通常涉及`BETWEEN`关键字或者使用日期函数来计算区间。例如,以下是一个...
│ 任意两个时间之间的星期几的次数-横.sql │ 任意两个时间之间的星期几的次数-纵.sql │ 复杂年月处理.sql │ 统计--交叉表+日期+优先.sql │ ├─第03章 │ │ 3.2 各种字符串分拆处理函数.sql │ │ 3.3 各种...
│ 2.5.3 工作日处理函数(自定义节假日).sql │ │ 2.5.4 计算工作时间的函数.sql │ │ │ └─其他 │ 交叉表.sql │ 任意两个时间之间的星期几的次数-横.sql │ 任意两个时间之间的...
- 确定两个日期之间的工作天数目:使用数据库函数排除周末和节假日。 - 计算一年中周内各日期的次数:统计一年中各周内某天的出现频率。 - 确定当前记录和下一条记录之间相差的天数:使用数据库的日期差函数。 8...
- **`DATEDIFF`**: 计算两个日期/时间之间的差值。 - **`DATEDIFF_BIG`**: 类似于DATEDIFF,但可以处理更大的范围。 - **`DATEFROMPARTS`**: 从年、月、日构建日期。 - **`DATENAME`**: 返回日期/时间表达式的指定...
3. DATEDIFF():计算两个日期或时间之间的差异,可以按天、小时、秒等单位返回差值。 4. DATEPART():从日期或时间表达式中提取特定部分,如年、月、日、小时等。 5. DATEFROMPARTS()和TIMEFROMPARTS():根据各个...
例如,在SQL中,`DATEADD`和`DATEDIFF`函数分别用于增加日期和计算两个日期之间的差值。 2. **日期格式化**:将日期转换为特定的字符串格式是另一个常见的需求,这可能涉及到提取特定部分(如年、月、日)或者使用...
- `DATEDIFF()`:计算两个日期之间的差异(以指定的时间单位计)。 - `DATEPART()`:提取日期或时间的特定部分,如年、月、日等。 - `DATEFROMPARTS()`:根据给定的年、月、日创建日期。 - `TIMEFROMPARTS()`:...
- SQL默认会返回所有匹配的结果行,包括重复的行。如果需要去除重复的数据,可以使用DISTINCT关键字。 **1.5 iSQL\*Plus简介** - **1.5.1 iSQL\*Plus概览** - iSQL*Plus是Oracle提供的一个命令行工具,用于执行...
23.计算两个日期之间的工作日 43 24.根据年月生成日历函数 44 25.从第一个汉字开始分割字符串 47 26.过滤掉字符串中重复的字符 47 27.根据日期得到星期的函数 48 28.根据年度判断是否是闰年 49 29.完善SQL农历转换...
此查询将返回所有至少连续出现3次的分数,且不会包含重复的分数值。 总结来说,解决连续数值查询的问题,主要涉及以下几个步骤: 1. 创建一个包含连续数值的表结构。 2. 插入模拟数据,以反映连续出现的数值情况。 ...
`NOT EXISTS`子句确保了没有其他登录记录在这两个日期之间,从而保证了连续性。 为了实现一个通用的MySQL函数,我们可以创建一个存储过程,接受用户ID和开始日期作为参数,返回最长连续登录天数。例如: ```sql ...
4. **FIRST_VALUE()和LAST_VALUE()**:这两个函数分别返回指定列在窗口中的第一个和最后一个值,这对于计算趋势变化或查找序列中的异常值很有帮助。 5. **PERCENT_RANK()和CUME_DIST()**:这些函数提供相对排名和...
上述SQL查询的结果将返回每组连续日期的起始年份、起始日期、结束日期以及日期连续的天数。通过`MIN(TDATE)`和`MAX(TDATE)`,我们可以确定连续日期的范围;`COUNT(TYEAR)`则表示该连续日期的天数。 5. **应用场景*...
例如,`AVG(salary) OVER (PARTITION BY manager_id ORDER BY hire_date ROWS BETWEEN 1 PRECEDING AND 2 FOLLOWING)` 计算了每个经理下的员工,按照入职日期排序,当前员工及其前后两个员工的平均薪资。 总之,SQL...
- `bycmpr()`:比较两个连续的字节内存块。 - `bycopy()`:复制内存块内容。 - `byfill()`:用指定字符填充内存块。 - `byleng()`:统计去除末尾空格的有效字符数。 3. **字符串操作函数**: - `ldchar()`:从...
初始化了两个日期变量 `@begin_date` 和 `@end_date` 来界定日期的范围。 ```sql INSERT INTO @tb (a) SELECT TOP 366 0 FROM sysobjects a, sysobjects b ``` 通过插入 366 行数据到 `@tb` 中,以便后续生成日期...
- `JOIN` 用于将两个或多个表的数据组合在一起。 - `ON` 子句指定了连接条件。 **2.5 汇总查询(Group Query)** **语法:** ``` SELECT column_name, aggregate_function(column_name) FROM table_name GROUP BY ...
- SQL语句中的注释通常使用两个连续的短划线(--)来添加注释文本,以提高SQL代码的可读性。 - 使用事务控制语言(TCL)来确保数据的一致性和完整性,特别是在涉及多个操作的场景下。 - 为了避免SQL注入等安全风险,...
在处理SQL语句时,其中所有的空格都被忽略(空格只用来分开单词,连续多个空格当一个用)。 SQL语句可以在一行上写出,建议多行写出,便于阅读和调试。 多条SQL语句必须以分号分隔。多数DBMS不需要在单条SQL语句后...