在Oracle和MySQL中利用SQL查询出今年日历

Posted robinson1988

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Oracle和MySQL中利用SQL查询出今年日历相关的知识,希望对你有一定的参考价值。

Oracle写法:

select case
         when row_number() over(partition by mon order by week) = 1 then
          mon || '月'
       end as month,
       max(一) 一,
       max(二) 二,
       max(三) 三,
       max(四) 四,
       max(五) 五,
       max(六) 六,
       max(日) 日
  from (select case
                 when to_number(to_char(start_day + i, 'iw')) > 1 and
                      to_number(to_char(start_day + i, 'ddd')) < 7 then
                  0
                 else
                  to_number(to_char(start_day + i, 'iw'))
               end week,
               to_number(to_char(start_day + i, 'mm')) mon,
               case
                 when to_char(start_day + i, 'd') = c.一 then
                  to_char(start_day + i, 'dd')
               end 一,
               case
                 when to_char(start_day + i, 'd') = c.二 then
                  to_char(start_day + i, 'dd')
               end 二,
               case
                 when to_char(start_day + i, 'd') = c.三 then
                  to_char(start_day + i, 'dd')
               end 三,
               case
                 when to_char(start_day + i, 'd') = c.四 then
                  to_char(start_day + i, 'dd')
               end 四,
               case
                 when to_char(start_day + i, 'd') = c.五 then
                  to_char(start_day + i, 'dd')
               end 五,
               case
                 when to_char(start_day + i, 'd') = c.六 then
                  to_char(start_day + i, 'dd')
               end 六,
               case
                 when to_char(start_day + i, 'd') = c.日 then
                  to_char(start_day + i, 'dd')
               end 日
          from (select last_day(add_months(trunc(sysdate),
                                           -to_number(to_char(sysdate, 'mm')))) start_day
                  from dual) a,
               (select rownum i from xmltable('1 to 1000')) b,
               (select '2' 一, '3' 二, '4' 三, '5' 四, '6' 五, '7' 六, '1' 日
                  from dual) c
         where start_day + i < = add_months(last_day(add_months(trunc(sysdate),
                                                                -to_number(to_char(sysdate,
                                                                                   'mm')))),
                                            12))
 group by mon, week
 order by mon, week;


想不想成为SQL大神?想不想精通SQL优化,精通所有关系型数据库优化?
加我微信692162374 报名单独辅导 , 顺带我还可以教你Python,Oracle,mysql,以及大数据
 

MySQL写法:

select case
         when row_number() over(partition by month order by date) = 1 then
          concat(month + 0, '月')
       end month,
       max(一) 一,
       max(二) 二,
       max(三) 三,
       max(四) 四,
       max(五) 五,
       max(六) 六,
       max(日) 日
  from (select date,
               week(date, 1) wk,
               date_format(date, '%m') month,
               case
                 when date_format(date, '%w') = 1 then
                  date_format(date, '%d')
               end 一,
               case
                 when date_format(date, '%w') = 2 then
                  date_format(date, '%d')
               end 二,
               case
                 when date_format(date, '%w') = 3 then
                  date_format(date, '%d')
               end 三,
               case
                 when date_format(date, '%w') = 4 then
                  date_format(date, '%d')
               end 四,
               case
                 when date_format(date, '%w') = 5 then
                  date_format(date, '%d')
               end 五,
               case
                 when date_format(date, '%w') = 6 then
                  date_format(date, '%d')
               end 六,
               case
                 when date_format(date, '%w') = 0 then
                  date_format(date, '%d')
               end 日
          from (WITH t_i AS(WITH RECURSIVE x(n) AS (SELECT 1 UNION ALL
                                                            SELECT n + 1
                                                              FROM x
                                                             WHERE n < 1000
                                                    )
                 SELECT n as i
                   FROM x), t_date AS (select last_day(date_add(CURRENT_DATE(),
                                                                interval -
                                                                month(CURRENT_DATE())
                                                                month)) date)
                 select date_add(date, interval i day) date
                   from t_i, t_date
                  where date_add(date, interval i day) <=
                        date_add(last_day(date_add(CURRENT_DATE(),
                                                   interval -
                                                   month(CURRENT_DATE()) month)),
                                 interval 1 year)) a
        ) a
 group by wk, month;

想不想成为SQL大神?想不想精通SQL优化,精通所有关系型数据库优化?
加我微信692162374 报名单独辅导 , 顺带我还可以教你Python,Oracle,MySQL,以及大数据

以上是关于在Oracle和MySQL中利用SQL查询出今年日历的主要内容,如果未能解决你的问题,请参考以下文章

用SQL语句查询出数据表中的字段名以及注释(Oracle)

2019-05-05

oracle 高效分页查询SQL

SQL查询从数据中获取最新价格?

利用反射封装Oracle数据库表对应的VO对象

mysql模糊查询区分大小写的问题~~