我与旧事归于尽,来年依旧迎花开。

剑谱最终页,无爱即是神。

岁末将至,祝我得偿所愿,平安喜乐!

描述:

今天在整理日志的时候 突然发现时间过得好快,一转眼的功夫,2021年已经从年前到了年尾,而口罩也是始终如一的带着,丝毫不敢懈怠~(积极响应国家号召,感慨疫情对人们的生活造成诸多不便......),突然想到mysql sqlserver oracle 自己遇到的一些语法上的区分,避免小伙伴跟我一样,踩着百度链接一步一个坑的走过来,噗哈哈哈~新年快乐

过了今天 以后的 sj;sysdate;current_date都是2022啦

一、获取系统时间

MYSQL

select now()

select SYSDATE()

select CURRENT_DATE

select CURRENT_TIME

SQL Server

select  getdate()

Oracle

select sysdate from dual; -- 31-12月-21

二、格式化

MYSQL

select year(now()) -- 2021
select month(now()) -- 12
select day(now()) -- 31
select hour(now()) -- 21
select MINUTE(now()) -- 18
select second(now()) -- 58

SQL Server

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

Oracle

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的同环比 其他三个并没有实际操作

MYSQL

SQL Server

Oracle

SQLite

SQLite – Java | 菜鸟教程

select t.m,t.ym,

t.销量,

t1.销量 同期,

(case when t1.销量 is null then ''

else (t.销量-t1.销量)/t1.销量 end) 同比,

t2.销量 上期,

(case when t2.销量 is null then ''

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.订购日期) = '1997'

group by strftime('%Y-%m',b.订购日期)

) t   -- 1997年 m月份 ym年月 销量 销售额

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.订购日期) = '1996'

group by strftime('%Y-%m',b.订购日期)

) t1 on t.m=t1.m  -- 1996 年 m月份 ym年月 销量 销售额

left join

(

select (case when strftime('%m',b.订购日期)+0 <=11

then strftime('%m',b.订购日期)+1 end) m, -- 1997年 使用then判断 ym中月份小于等于11 将月份+1

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.订购日期)

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.订购日期) = '1996'

group by strftime('%Y-%m',b.订购日期)

) t2 on t.m=t2.m

四、截取字符串

MYSQL

函数 作用
SUBSTR(str FROM pos FOR len) 截取字段value,从第pos位开始截取,截取len位
SUBSTR(str FROM pos) 截取字段value,从第pos位开始截取,截取到最后一位
SUBSTR(str,pos) 将str字段截取 索引从1开始计算 从pos开始截取 直到最后
SUBSTR(str,pos,len) 将str字段截取  索引从pos开始计算 截取长度为len
SUBDATE(date,INTERVAL expr unit) 在下面六、日期计算 有详细解释
SUBDATE(expr,days) 在下面六、日期计算 有详细解释
SUBTIME(expr1,expr2) 在下面六、日期计算 有详细解释
substring函数
SUBSTRING(str FROM pos FOR len) 截取字段dua,从第pos位开始截取,截取len位 
SUBSTRING(str FROM pos) 截取字段dua,索引从1开始计算,从pos开始截取 直到最后
SUBSTRING(str,pos) 同SUBSTRING(str FROM pos)函数
SUBSTRING(str,pos,len) 同SUBSTRING(str FROM pos FOR len)函数
SUBSTRING_INDEX(str,delim,count) 将str字符串,按照delim的格式进行分割,然后按照分割后计数的方式截取。count的为正数从左到右截取,count为负数从右到左截取,count为0,结果集为空。

select 
SUBSTR(td1.value from 1 for 2)
from 
(select concat('123','456') value) td1

select 
SUBSTR(td1.value from 2)
from 
(select concat('123','456') value) td1

select 
substr(td1.dua,2,3),    
substr(td1.dua,2)  
from
(select concat('123','456') dua) td1

substring函数

select 
SUBSTRING(td1.dua from 2 for 3)
from
(select concat('123','456') dua) td1

select 
SUBSTRING(td1.dua from 2)
from
(select concat('123','456') dua) td1

select 
SUBSTRING(td1.dua , 2),
SUBSTRING(td1.dua , 2,3)
from
(select concat('123','456') dua) td1

select
SUBSTRING_INDEX('www.kugou.com','.',-4) 负四,
SUBSTRING_INDEX('www.kugou.com','.',-3) 负三,
SUBSTRING_INDEX('www.kugou.com','.',-2) 负二,
SUBSTRING_INDEX('www.kugou.com','.',-1) 负一,
SUBSTRING_INDEX('www.kugou.com','.',0) 零,
SUBSTRING_INDEX('www.kugou.com','.',1) 一,
SUBSTRING_INDEX('www.kugou.com','.',2) 二,
SUBSTRING_INDEX('www.kugou.com','.',3) 三,
SUBSTRING_INDEX('www.kugou.com','.',4) 四;

总结:大致可分为三类 一类是substr(str1,str2)两个参数截取str1,截取到str2的位置、一类是substring(str1,str2,str3)三个参数的截取str1,从str2截取到str3的位置、最后一类是substring_index(str1,str2,str3)按照指定格式进行截取 截取str1 按照str2的格式 截取第几个str3的位置

SQL Server

函数 作用
SUBSTRING(expression, start, length) 截取expression,开始位置是start,截取长度为lenth
LEFT(character_expression, integer_expression) 从左边开始截取 character_expression 截取长度为 integer_expression
RIGHT(character_expression, integer_expression) 从右边开始截取 character_expression 截取长度为 integer_expression
CHARINDEX(expression1, expression2 [,start_location]) 查找expression1(子),在expression2(父)中查找expression1(子)的位置,经测试 默认是从1开始计算,负数意义不大,返回值是子在父中所占的位置,如果没有,返回0。

select
left(td1.dua,3)
from
(select '123' + '456' as dua) td1

select
right(td1.dua,3)
from
(select '123' + '456' as dua) td1

select
SUBSTRING(td1.dua, 1, 3)
from
(select '123' + '456' as dua) td1

select
charindex('2','123456',-2) 负二,
charindex('2','123456',-1) 负一,
charindex('2','123456',0) 零,
charindex('2','123456',1) 一,
charindex('2','123456',2) 二,
charindex('2','123456',3) 三,
charindex('2','123456',4) 四;

Oracle

SQLite

函数:substr(string string,num start,num length)
用法:
string为字符串;
start为起始位置;字符串的第一个字符的位置为1,不是从0开始计算
length为长度

五、拼接字符串

MYSQL

select concat(str1,str2)

select concat('123','456')

SQL Server

select '123' + '456'

Oracle

六、日期计算

MYSQL

SQL Server

Oracle

SQLite

DATEDIFF ( datepart , startdate , enddate ) -- 用 enddate 减去 startdate

七、类型转换

MYSQL

SQL Server

SQL Server 采用convert(varchr,'')用法

Oracle

Oracle 采用to_char用法

八、将多列合并一列

MYSQL

select concat(str1,str2,str3) from 表 -- 可带多个参数

SQL Server

Oracle

select concat(str1,str2) from 表 -- concat只能带两个参数

select str1||str2||str3 from 表 -- || 可以多个拼接

以上零零散散都是自己在工作中遇到过的 自己经常忘 混淆 这里做一下知识整理总结 当然还有很多自己没有遇到过的 感觉挺有意思的 跟同事调侃到“为啥不出来一个牛皮的大佬组织啥的将SQL语法统一的玩笑话”"都一样怎么体现出与众不同呢" 其实很多地方也都是相通的知识部分语法 函数不同 像select group by where 都是通用系列 好啦 时间关系 今天先记录到这里

下次在家!!!

我与旧事归于尽,来年依旧迎花开~相关推荐

  1. 大数据能力提升项目| 学生成果展系列之一

    导读 为了发挥清华大学多学科优势,搭建跨学科交叉融合平台,创新跨学科交叉培养模式,培养具有大数据思维和应用创新的"π"型人才,由清华大学研究生院.清华大学大数据研究中心及相关院系共 ...

  2. 告别2022,喜迎2023

    2022只剩下最后几天,新的一年即将拉开序幕.你的2022,是苦尽甘来.柳暗花明,还是安适如常.平安喜乐?你会用什么词来形容你的2022,你期待的2023又是什么样的呢? 时光荏苒,岁月悠悠,转眼间, ...

  3. 2022年度总结——一切都在慢慢变好

    人生天地之间,若白驹过隙,忽然而已,每个人都希望留下自己的足迹.--题记 日月两盏灯,春秋一场梦. 回想一年前的现在我在干什么呢?去年的寒假我刚步入大学一个学期,迷茫彷徨,怅然若失,为自己没有考上一个 ...

  4. 元旦文案‖适合2021年跨年发的句子

    1."我主演的2021即将开机,我将继续扮演一个混吃等死的废物,继续无所事事整天宅在家里,传播负能量,文体两凋零,请多多关注" "我主演的2021即将开机,我将继续扮演一 ...

  5. (1)数据库系统简介

    目录 0-前言 1-数据库的定义及相关概念 2-数据管理技术的发展 3-数据库系统的组成 写在最后 0-前言 这个章节的内容看起来是"最没用的",但是我个人始终觉得,学习一门新的技 ...

  6. mysql我没压岁钱了_2021你压没压我睡没睡我表情包动图下载-抖音你压没压我睡没睡我该不该给我压岁钱表情包gif版-东坡下载...

    抖音你压没压我睡没睡我该不该给我压岁钱表情包非常火爆的抖音表情包,让你可以跟紧潮流的表情包,更好的进行斗图使用,可以有效的提升彼此的感情. 抖音你压没压我睡没睡我该不该给我压岁钱表情包介绍 1.春节习 ...

  7. 新年,你拥有一个新灵魂了吗?

    这个年,过得好快,转眼就到了开工的日子,忙忙碌碌的几天,没有闲着没有虚度,但和原来的设想大相径庭.原计划是要休息休整,只陪伴家人,充电学习.吃喝娱乐. 但实际却被很多具体的事情填满:去了两个地方,开封 ...

  8. 你们的微信个性签名是什么?

    都是风景,幸会. 遇见即是上上签. 未知苦处,不信神佛. --<杀破狼> 一如既往,万事胜意. --承天峙 世界很大,开心第一. 一切尽意,百事从欢 且陶陶,乐尽天真. --苏轼<行 ...

  9. 计算机系张馨文,各学院的哥哥姐姐们来给大家拜年啦

    原标题:各学院的哥哥姐姐们来给大家拜年啦 锵锵锵,春节到 小微掐指一算 这个春节你还缺份祝福 这不,小微采访了来自各学院的哥哥姐姐们 他们和小微 来给大家拜年啦! . 外国语学院 . Wishing ...

  10. 2022跨年烟花——封宿后的去旧年

    文章目录 前言 代码 需要的图片 最后 前言 首先,祝福各位彦祖们,2022快乐,如果没有对象,今年必定脱单!在封宿之余,我做了个跨年烟花来给自己过个年,和彦祖们分享一下,大家先来看一下效果图. 代码 ...

最新文章

  1. mongodb 安装启动
  2. 模板类的析构函数如何写_顶尖文案如何写?这6大模板、29个方法,奥美大咖都在用!|优惠最后1天...
  3. C++ 重载赋值运算符与11选5平台修复
  4. Linux(debian7)操作基础(十三)之shell脚本同时执行多个应用程序
  5. MySQL 当记录不存在时insert,当记录存在时update(ON DUPLICATE KEY UPDATE, REPLACE语句)...
  6. Sql Server和oracle的函数区别总结
  7. RubyInstaller
  8. [转帖]身份证前两位是怎么来的
  9. Google Daydream实验室:VR设计的三大要素
  10. VMware的XP虚拟机联网
  11. 微信红包封面,你真的领取到了吗?
  12. ubuntu20.04修改mac地址
  13. 商业智能BI推动制造业智能化转型
  14. 查看ftp服务器里的文件,查看ftp服务器所有文件
  15. Java Web项目中使用Freemarker生成Word文档
  16. (29)Verilog实现倍频【方法二】
  17. 中粤拼音在线转换_挖儿思:提高“汉字注拼音”作业的批改效率
  18. sja1000 中断_SJA1000PeliCAN模式下自收发问题
  19. python 标签云_python 制作标签云
  20. 腾讯云增值税发票识别

热门文章

  1. Git 提交大文件提示 fatal: The remote end hung up unexpectedly
  2. 淘宝客用微博推广方法
  3. android apk 微信登入_Android实现使用微信登录第三方APP的方法
  4. 分享一个蛋白互作网站——String (一)
  5. PR/PS/AE/达芬奇免费模板素材网站分享——个人纯分享,没有公众号,没有广告!
  6. 基于STM32CubeIDE的STM32H750 DCMI接口驱动OV2640读取JPEG结合自编上位机实现可以用的数字图传
  7. 秃头程序员保姆教程:Spring框架自学之路(一)
  8. python爬虫--看看虎牙女主播中谁最“顶”
  9. org.apache.jasper.JasperException: /app/jsonp.jsp(1,2) Page-encoding specified in jsp-property-grou
  10. 网络编程 :System.Net概述(1)