1 要构造某年某月的日历,必须先知道这个月的开始时间,结束时间及天数
开始日期 例如 2006年11月
select to_date('20061101','yyyymmdd') as startDayOfMon from dual;
结束日期
select last_day(to_date('20061101','yyyymmdd')) as endDayOfMon from dual;
日期区间天数
select last_day(to_date('20061101','yyyymmdd')) - to_date('20061101','yyyymmdd') +1 as DayOfMon
from dual;
2 接下来就是需要得到开始时间到结束时间每一天的结果集
select * from (
select to_date('20061101','yyyymmdd') + level - 1 as everyDay from dual
connect by level <=
(last_day(to_date('20061101','yyyymmdd')) - to_date('20061101','yyyymmdd') +1));
3 再进一步则是将该月中的日期分解成第几周,星期几。
select everyDay,to_char(everyday,'yyyy') as 年,
to_char(everyday,'mm') as 月,
to_char(everyday,'dd') as 日,
to_char(everyday,'dy') as 星期几,
lpad(to_char(everyday,'w'),6) as 该月的第几周,
lpad(to_char(everyday,'ww'),6) as 该年的第几周
from(select to_date('20061101','yyyymmdd') + level - 1 as everyDay from dual
connect by level <=
(last_day(to_date('20061101','yyyymmdd')) - to_date('20061101','yyyymmdd') +1));
4 这个结果集求出来后,接下拉就是使用DECODE函数进行行列转换了
select everyDay,to_char(everyday,'yyyy') as 年,
to_char(everyday,'mm') as 月,
to_char(everyday,'dd') as 日,
to_char(everyday,'dy') as 星期几,
lpad(to_char(everyday,'w'),6) as 该月的第几周,
lpad(to_char(everyday,'ww'),6) as 该年的第几周,
lpad(decode(to_char(everyday,'dy'),'星期日',to_char(everyday,'dd')),3) as 星期日,
lpad(decode(to_char(everyday,'dy'),'星期一',to_char(everyday,'dd')),3) as 星期一,
lpad(decode(to_char(everyday,'dy'),'星期二',to_char(everyday,'dd')),3) as 星期二,
lpad(decode(to_char(everyday,'dy'),'星期三',to_char(everyday,'dd')),3) as 星期三,
lpad(decode(to_char(everyday,'dy'),'星期四',to_char(everyday,'dd')),3) as 星期四,
lpad(decode(to_char(everyday,'dy'),'星期五',to_char(everyday,'dd')),3) as 星期五,
lpad(decode(to_char(everyday,'dy'),'星期六',to_char(everyday,'dd')),3) as 星期六
from(select to_date('20061101','yyyymmdd') + level - 1 as everyDay from dual
connect by level <=
(last_day(to_date('20061101','yyyymmdd')) - to_date('20061101','yyyymmdd') +1));
5 再进一步就是统计汇总了,大家发现一个小问题没有?
就是该月的第几周这里是按本月开始是星期几为开始的日期,很有意思,
这样我们按该日是该年的第几周则是以今年开始日期是星期几为开始日期
select to_char(everyday,'w') as week,
sum(decode(to_char(everyday,'dy'),'星期日',to_char(everyday,'dd'))) as 星期日,
sum(decode(to_char(everyday,'dy'),'星期一',to_char(everyday,'dd'))) as 星期一,
sum(decode(to_char(everyday,'dy'),'星期二',to_char(everyday,'dd'))) as 星期二,
sum(decode(to_char(everyday,'dy'),'星期三',to_char(everyday,'dd'))) as 星期三,
sum(decode(to_char(everyday,'dy'),'星期四',to_char(everyday,'dd'))) as 星期四,
sum(decode(to_char(everyday,'dy'),'星期五',to_char(everyday,'dd'))) as 星期五,
sum(decode(to_char(everyday,'dy'),'星期六',to_char(everyday,'dd'))) as 星期六
from(select to_date('20061101','yyyymmdd') + level - 1 as everyDay
from dual
connect by level <= (last_day(to_date('20061101','yyyymmdd')) - to_date('20061101','yyyymmdd') +1)
)
group by to_char(everyday,'w');
6 以上日历基本成功,但还有一个问题,就是一周的开始时间问题
select to_char(everyday,'ww') as week,
sum(decode(to_char(everyday,'dy'),'星期日',to_char(everyday,'dd'))) as 星期日,
sum(decode(to_char(everyday,'dy'),'星期一',to_char(everyday,'dd'))) as 星期一,
sum(decode(to_char(everyday,'dy'),'星期二',to_char(everyday,'dd'))) as 星期二,
sum(decode(to_char(everyday,'dy'),'星期三',to_char(everyday,'dd'))) as 星期三,
sum(decode(to_char(everyday,'dy'),'星期四',to_char(everyday,'dd'))) as 星期四,
sum(decode(to_char(everyday,'dy'),'星期五',to_char(everyday,'dd'))) as 星期五,
sum(decode(to_char(everyday,'dy'),'星期六',to_char(everyday,'dd'))) as 星期六
from(select to_date('20061101','yyyymmdd') + level - 1 as everyDay
from dual
connect by level <= (last_day(to_date('20061101','yyyymmdd')) - to_date('20061101','yyyymmdd') +1)
)
group by to_char(everyday,'ww');
7 这样虽然可以解决,但还存在问题,大家可以考虑下!也可以考虑下年历怎么做!
select ceil((to_char(everyday,'dd')+(to_char(to_date('20061101','yyyymmdd'),'d')-1))/7) as week,
sum(decode(to_char(everyday,'dy'),'星期日',to_char(everyday,'dd'))) as 星期日,
sum(decode(to_char(everyday,'dy'),'星期一',to_char(everyday,'dd'))) as 星期一,
sum(decode(to_char(everyday,'dy'),'星期二',to_char(everyday,'dd'))) as 星期二,
sum(decode(to_char(everyday,'dy'),'星期三',to_char(everyday,'dd'))) as 星期三,
sum(decode(to_char(everyday,'dy'),'星期四',to_char(everyday,'dd'))) as 星期四,
sum(decode(to_char(everyday,'dy'),'星期五',to_char(everyday,'dd'))) as 星期五,
sum(decode(to_char(everyday,'dy'),'星期六',to_char(everyday,'dd'))) as 星期六
from(select to_date('20061101','yyyymmdd') + level - 1 as everyDay
from dual
connect by level <= (last_day(to_date('20061101','yyyymmdd')) - to_date('20061101','yyyymmdd') +1)
)
group by ceil((to_char(everyday,'dd')+(to_char(to_date('20061101','yyyymmdd'),'d')-1))/7);
以上是最终的结果。
年日历
select case
when (new_yweek = min(new_yweek)
over(partition by mon order by new_yweek)) then
mon_name
else
null
end as month,
new_yweek as yweek,
row_number() over(partition by mon order by new_yweek) as mweek,
sum(decode(wday, '1', mday, null)) as sun,
sum(decode(wday, '2', mday, null)) as mon,
sum(decode(wday, '3', mday, null)) as tue,
sum(decode(wday, '4', mday, null)) as wed,
sum(decode(wday, '5', mday, null)) as thu,
sum(decode(wday, '6', mday, null)) as fri,
sum(decode(wday, '7', mday, null)) as sat
from (select dayofyear as everyday,
to_char(dayofyear, 'mm') as mon,
to_char(dayofyear, 'Month') as mon_name,
to_char(dayofyear, 'w') as mweek,
to_char(dayofyear, 'ww') as yweek,
case
when (to_char(to_date(&year || '0101', 'yyyymmdd'), 'd') > '1') and
(to_char(dayofyear, 'd') <
to_char(to_date(&year || '0101', 'yyyymmdd'), 'd')) then
to_char(to_char(dayofyear, 'ww') + 1, 'fm00')
else
to_char(dayofyear, 'ww')
end as new_yweek,
to_char(dayofyear, 'd') as wday,
to_char(dayofyear, 'dd') as mday
from (select to_date(&year || '0101', 'yyyymmdd') + level - 1 as dayofyear
from dual
connect by level <=
to_char(to_date(&year || '1231', 'yyyymmdd'),
'ddd')))
group by mon, mon_name, new_yweek
分享到:
相关推荐
Quartz的初始化SQL语句主要用于创建存储作业(Jobs)、触发器(Triggers)、日历(Calendars)等信息的数据库表。这些表是Quartz与数据库交互的基础,确保任务调度的正常运行。在Quartz 2.2.3版本中,提供的SQL脚本...
通过这个"万年历包含农历及黄历的日历sql语句.rar"压缩包,我们可以学习到如何用SQL构建一个全面的日历系统,这对于开发涉及日期和时间处理的应用程序非常有帮助。同时,这也是一次了解数据库设计、性能优化和文化...
例如,"mysql.sql", "postgresql.sql", "oracle.sql", "mssql.sql"分别包含这些数据库的建表语句。运行相应的SQL文件后,确保检查表是否成功创建,并且没有语法错误。 在使用Quartz时,还需要注意以下几点: - 配置...
为了保证Quartz与数据库的兼容性,这些SQL语句通常会按照特定的数据库方言编写,因此在使用前需要确认SQL语句与目标数据库系统匹配。此外,对于大型应用,可能还需要考虑表分区、索引优化等高级特性,以提高Quartz的...
* 查看 Oracle 服务器端的字符集:使用 SQL 语句 `SELECT USERENV('LANGUAGE') FROM DUAL;` * 查看 DUMP 文件的字符集:使用 Oracle 的 EXP 工具导出的 DUMP 文件,查看文件的第二和第三个字节,记录字符集信息。...
开发者可能使用JDBC(Java Database Connectivity)来建立Java与Oracle数据库之间的连接,并通过PreparedStatement执行SQL语句,以实现增删改查操作。 在项目中,数据库设计可能包括用户表、日程表和其他关联表,如...
- 创建日历:使用数据库表生成日历视图。 - 列出一年中每个季度的开始日期和结束日期:计算并列出一年四季的开始和结束日期。 - 确定某个给定季度的开始日期和结束日期:计算特定季度的开始和结束日期。 - 补充...
使用这些脚本时,开发者应根据自己的数据库类型选择相应的文件,然后在数据库管理工具中运行这些SQL语句。在执行前,建议备份现有数据库,以防数据丢失。一旦表创建成功,Quartz的配置文件(如`quartz.properties`)...
你可以通过以下SQL语句查询Oracle服务器端的字符集: ```sql SELECT userenv('language') FROM dual; ``` 而在Windows系统下,可以通过查看注册表中的Oracle Home设置或在DOS命令行中使用`set nls_lang=AMERICAN_...
类似的,你还会找到针对Oracle、SQL Server、PostgreSQL等其他数据库的创建脚本。 在Quartz中配置数据库持久化时,你需要在`quartz.properties`文件中指定数据库连接的相关信息,如JDBC驱动、URL、用户名和密码,...
2. **编写代码**:在触发器中编写具体的SQL语句或PL/SQL代码,实现数据的更新操作。 ##### 2.7 一个简单的例子:上传&编译 完成Form的设计和编码后,需要将其上传到Oracle EBS环境中,并进行编译。这一步骤非常...
sys_context 函数可以在 SQL 语句中使用,也可以在 PL/SQL 程序中使用。例如: ```sql SELECT SYS_CONTEXT('USERENV', 'SESSIONID') FROM DUAL; ``` 这将返回当前会话的 ID。 sys_context 函数是一个非常有用的函数...
5.执行MySql和Oracle滴混合事务,执行多条SQL语句,实现数据库事务。 6.执行带一个存储过程参数的的SQL语句。 7.执行带一个存储过程参数的的SQL语句。 8.向数据库里插入图像格式的字段(和上面情况类似的另一种实例) ...
- 共享池:存储最近使用的SQL语句。 - 数据库缓冲区缓存:存储最近访问的数据。 - 重做日志缓冲区:存储事务信息用于恢复。 - Java池:可选,用于存储Java代码。 #### 十、硬件安装要求 文档指出了Oracle安装...
- **SQL语句**:使用SQL语句来指定要检索的数据。 - **数据块**:Form中的数据块用于存储查询结果。 - **触发器**:通过触发器来执行查询并将结果填充到数据块中。 ##### 5.2 例子:Lov查询 Lov查询是一种特殊的...
如果系统需要持久化存储日历数据和用户设置,那么可能会涉及到数据库的使用,如SQLite、SQL Server或者Oracle。ADO.NET库可以帮助开发者方便地与数据库交互,进行CRUD(Create, Read, Update, Delete)操作。 7. *...
这两个文件可能包含了具体的数据库建表语句,"新建文本文档 (2).txt"可能是一个文本文件,里面包含了SQL语句,"dbTables"可能是按照数据库格式组织的表结构文件。使用时,你需要打开这些文件,查看或执行其中的SQL...
分析SQL语句的执行计划;调整数据库参数以优化性能等。 #### 备份与恢复策略 - **备份**:根据不同的业务需求制定备份策略,包括全备、增量备份、热备等多种方式。 - **恢复**:当发生故障时能够快速恢复数据库到...
- **查询**:使用SQL语句进行数据检索,如SELECT语句。 - **插入**:INSERT语句用于向表中添加新记录。 - **更新**:UPDATE语句用于修改现有记录的数据。 - **删除**:DELETE语句用于移除表中的记录。 5. **...
4. Oracle Collaboration Suite:协作套件,包含电子邮件、即时消息、日历等功能。 5. Oracle Development Suite:开发工具集,用于构建和测试应用程序。 接着,课程详细介绍了关系型数据库系统。在这一模型中,...