在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查询出今年日历的主要内容,如果未能解决你的问题,请参考以下文章