我与旧事归于尽,来年依旧迎花开。
剑谱最终页,无爱即是神。
岁末将至,祝我得偿所愿,平安喜乐!
描述:
今天在整理日志的时候 突然发现时间过得好快,一转眼的功夫,2021年已经从年前到了年尾,而口罩也是始终如一的带着,丝毫不敢懈怠~(积极响应国家号召,感慨疫情对人们的生活造成诸多不便......),突然想到mysql sqlserver oracle 自己遇到的一些语法上的区分,避免小伙伴跟我一样,踩着百度链接一步一个坑的走过来,噗哈哈哈~新年快乐
过了今天 以后的 sj;sysdate;current_date都是2022啦
select SYSDATE()
select now()select CURRENT_DATE
select CURRENT_TIME
select getdate()
select sysdate from dual; -- 31-12月-21
select year(now()) -- 2021
select month(now()) -- 12
select day(now()) -- 31
select hour(now()) -- 21
select MINUTE(now()) -- 18
select second(now()) -- 58
CONVERT() 函数可以用不同的格式显示日期/时间数据
select convert(varchar(100) ,'yyyy-mm-dd') from ODS_NC_sales_Slip
select convert(varchar(100), getdate(), 20) -- 2021-12-01 15:21:00
select convert(varchar(100), getdate(), 21) -- 2021-12-01 15:21:10.073
select convert(varchar(100), getdate(), 22) -- 12/01/21 3:19:53 PM
select convert(varchar(100), getdate(), 23) -- 2021-12-01
select convert(varchar(100), getdate(), 24) -- 15:20:24
select convert(varchar(100), getdate(), 25) -- 2021-12-01 15:21:23.847
select to_char(sysdate,'yyyy-mm-dd hh24:mi') from dual; -- 2021-12-31 21:59
select to_char(sysdate, 'yyyy' ) from dual; --年 -- 2021
select to_char(sysdate, 'MM' ) from dual; --月 -- 12
select to_char(sysdate, 'dd' ) from dual; --日 -- 31
select to_char(sysdate, 'Q') from dual; --季 -- 4
select to_char(sysdate, 'iw') from dual; --周 --52 按日历上的那种,每年有52或者53周当前时间减去7天的时间
select sysdate - interval '7' day from dual; -- 24-12月-21
当前时间减去7月的时间
select sysdate,sysdate - interval '7' month from dual; -- 31-12月-21 31-5月 -21
在做这道题的时候 需要弄清楚几个名词
环比
是指本期与上期数据之间的比率。计算公式为:本期数/上期数✖100%。
环比增长率
是指本期与上期数据之间的增长比率。计算公式为:(本期数-上期数)/上期数×100%。
同比
是把当年每月与上一年相应月份的数据相除计算出的一个比率。即某年第 n 月与上一年第 n 月的比值,计算公式为:本期/同期*100%。
同比增长率
是指和去年同期相比较的增长率,即某年第n月与上一年第n月相比较的增长率,计算公式为:(本期-同期)/同期*100%。
SQL的不同 可能语法上有细微的差距 但是思路都是一样的 自己也只做过SQLite的同环比 其他三个并没有实际操作 时间关系这里暂时空着,再做补充
SQLite – Java | 菜鸟教程
select t.m,t.ym,
t.销量,
t1.销量 同期,
(case when t1.销量 is null then '2020'
else (t.销量-t1.销量)/t1.销量 end) 同比,
t2.销量 上期,
(case when t2.销量 is null then '2020'
else (t.销量-t2.销量)/t2.销量 end) 环比
from
(
select strftime('%m',b.订购日期)+0 m,
strftime('%Y-%m',b.订购日期) ym,
sum(a.数量) 销量
from 订单明细 a
left join 订单 b on a.订单ID=b.订单ID
where strftime('%Y',b.订购日期) = '2020'
group by strftime('%Y-%m',b.订购日期)
) t
left join
(
select strftime('%m',b.订购日期)+0 m,
strftime('%Y-%m',b.订购日期) ym,
sum(a.数量) 销量
from 订单明细 a
left join 订单 b on a.订单ID=b.订单ID
where strftime('%Y',b.订购日期) = 1997
group by strftime('%Y-%m',b.订购日期)
) t1 on t.m=t1.m
left join
(
select (case when strftime('%m',b.订购日期)+0 <=11
then strftime('%m',b.订购日期)+1 end) m,
strftime('%Y-%m',b.订购日期) ym,
sum(a.数量) 销量
from 订单明细 a
left join 订单 b on a.订单ID=b.订单ID
where strftime('%Y',b.订购日期) = '2020'
group by strftime('%Y-%m',b.订购日期)
union
select (case when strftime('%m',b.订购日期)+0 =12
then 1 end) m,
strftime('%Y-%m',b.订购日期) ym,
sum(a.数量) 销量
from 订单明细 a
left join 订单 b on a.订单ID=b.订单ID
where strftime('%Y',b.订购日期) = '2020'
group by strftime('%Y-%m',b.订购日期)
) t2 on t.m=t2.m
留空
留空
left()
right()
substring()
留空
函数:substr(string string,num start,num length)
用法:
string为字符串;
start为起始位置;字符串的第一个字符的位置为1,不是从0开始计算
length为长度
留空
留空
留空
DATEDIFF ( datepart , startdate , enddate ) -- 用 enddate 减去 startdate
留空
SQL Server 采用convert(varchr,'')用法
Oracle 采用to_char用法
select concat(str1,str2,str3) from 表 -- 可带多个参数
留空
select concat(str1,str2) from 表 -- concat只能带两个参数
select str1||str2||str3 from 表 -- || 可以多个拼接
以上零零散散都是自己在工作中遇到过的 自己经常忘 混淆 这里做一下知识整理总结 当然还有很多自己没有遇到过的 感觉挺有意思的 跟同事调侃到“为啥不出来一个牛皮的大佬组织啥的将SQL语法统一的玩笑话”"都一样怎么体现出与众不同呢" 其实很多地方也都是相通的知识部分语法 函数不同 像select group by where 都是通用系列 好啦 时间关系 今天先记录到这里
下次在家!!!