阿里云-ODPS SQL-日常开发日期、字符、数学运算、聚合函数函数使用技巧

news2024/9/24 19:19:17

文章目录

  • 1、背景
  • 2、 数据处理
    • 2.1、OLTP与OLAP概念
    • 2.2、OLTP与OLAP区别
  • 3、日常开发常用函数
    • 3.1、日期函数
    • 3.2、数学运算函数
    • 3.3、字符串处理函数
    • 3.4、聚合函数

1、背景

数据仓库,是一个面向主题的、集成的、随时间变化的、信息本身相对稳定的数据集合。

数据仓库从Oracle(单机、RAC),到MPP(Green plum),到Hadoop(Hive、Tez、Sprak),再到批流一体Flink/Blink、数据湖等,SQL都是其主流的数据处理工具。
海量数据下的高效数据流转,是数据分析朋友们必须直面的一个挑战。本文结合阿里自研的ODPS平台,从自身工作出发,总结日常使用过程中的SQL的一些日期、字符、数学运算、聚合函数函数使用技巧。

2、 数据处理

2.1、OLTP与OLAP概念

数据处理大致可以分成两大类:

联机事务处理OLTP(on-line transaction processing)、联机分析处理OLAP(On-Line
Analytical Processing)。

  • OLTP是我们最为常见传统的关系型数据库的主要应用,它主要用于基本的、日常的事务处理,例如银行交易。
  • OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。

2.2、OLTP与OLAP区别

  • OLTP 系统强调数据库内存效率,强调内存各种指标的命令率,绑定变量,并发操作等。
  • OLAP 系统则强调数据分析,强调SQL执行市场,磁盘I/O,分区等。
    在这里插入图片描述

3、日常开发常用函数

3.1、日期函数

日期函数一般指日期与时间函数。 日期与时间函数是指在公式中用来分析和处理日期值和时间值的函数。也是我们经常遇到的函数之一。

GETDATE函数: 获取当前系统的时间。

SELECT GETDATE();
执行结果: 2023-01-15 20:33:23

DATEADD函数: 日期增减

SELECT DATEADD(GETDATE(),1,'dd');
执行结果: 2021-06-28 20:34:17
SELECT DATEADD(GETDATE(),-1,'dd');
执行结果: 2021-06-26 20:34:30

DATEDIFF函数: 计算返回时间差值

SELECT DATEDIFF('2023-01-15 20:33:23','2023-01-13 20:33:23','dd');
执行结果: 2
SELECT DATEDIFF('2023-01-15 20:33:23','2022-12-15 20:33:23','mm');
执行结果: 1
SELECT DATEDIFF('2023-01-15 20:33:23','2022-01-15 20:33:23','yyyy');
执行结果: 1
SELECT DATEDIFF('2023-01-15 20:33:23','2023-01-15 16:33:23','hh');
执行结果: 4
SELECT DATEDIFF('2023-01-15 20:33:23','2023-01-15 20:10:23','mi');
执行结果: 23
SELECT DATEDIFF('2023-01-15 20:33:23','2023-01-15 20:33:10','ss');
执行结果: 13

ADD_MONTHS函数:
计算月,该函数将一个日期加上一指定的月份数,所以,日期中的日是不变的。然而,如果开始日期是某月的最后一天,那么,结果将会调整以使返回值仍对应新的一月的最后一天。如果,结果月份的天数比开始月份的天数少,那么,也会向回调整以适应有效日期。

SELECT ADD_MONTHS('2023-01-15',-1);
执行结果: 2022-12-15

DATEPART函数: 提取日期中part指定的部分

SELECT DATEPART('2023-01-15 20:33:23','yyyy');
执行结果: 2023
SELECT DATEPART('2023-01-15 20:33:23','mm');
执行结果: 1
SELECT DATEPART('2023-01-15 20:33:23','dd');
执行结果: 15
SELECT DATEPART('2023-01-15 20:33:23','hh');
执行结果: 20
SELECT DATEPART('2023-01-15 20:33:23','mi');
执行结果: 33
SELECT DATEPART('2023-01-15 20:33:23','ss');
执行结果: 23

DATETRUNC函数: 返回截取后的日期值

SELECT DATETRUNC('2023-01-15 20:33:23','yyyy');
执行结果: 2023-01-01 00:00:00

SELECT DATETRUNC('2023-01-15 20:33:23','mm');
执行结果: 2023-01-01 00:00:00

SELECT DATETRUNC('2023-01-15 20:33:23','dd');
执行结果: 2023-01-15 00:00:00

SELECT DATETRUNC('2023-01-15 20:33:23','hh');
执行结果: 2023-01-15 20:00:00

SELECT DATETRUNC('2023-01-15 20:33:23','mi');
执行结果: 2023-01-15 20:33:00

SELECT DATETRUNC('2023-01-15 20:33:23','ss');
执行结果: 2023-01-15 20:33:23

UNIX_TIMESTAMP函数: 将日期转化为整型的unix格式的日期时间值

SELECT UNIX_TIMESTAMP();
执行结果: 1624795597

FROM_UNIXTIME函数: 将数字型的unix 时间日期值转为DE日期值

SELECT FROM_UNIXTIME(1624795597);
执行结果: 2023-01-15 20:06:37

ISDATE函数: 判断一个日期字符串能否根据对应的格式串转换为一个日期值

SELECT ISDATE('2023-01-15 20:33:23','yyyy-mm-dd hh:mi:ss');
执行结果: true

LASTDAY函数: 取一个月的最后一天,截取到天

SELECT LASTDAY('2023-01-15 20:33:23');
执行结果: 2021-06-30 00:00:00

TO_DATE函数: 将一个字符串按照FORMAT指定的格式转成日期值

SELECT TO_DATE('2023-01-15 20:33:23','yyyy-mm-dd hh:mi:ss');
执行结果: 2023-01-15 20:33:23

TO_CHAR函数: 日期类型按照format指定的格式转成字符串

SELECT TO_CHAR(GETDATE(),'yyyy-mm-dd hh:mi:ss');
执行结果: 2023-01-15 20:17:26

WEEKDAY函数: 返回一个日期值是星期几

SELECT WEEKDAY(GETDATE());
执行结果: 6
星期一:0
星期二:1
星期三:2
星期四:3
星期五:4
星期六:5
星期天:6

WEEKOFYEAR函数: 返回一个日期位于那一年的第几周

SELECT WEEKOFYEAR(GETDATE());
执行结果: 25

3.2、数学运算函数

ABS函数: 绝对值函数

SELECT ABS(-1.567);
执行结果: 1.567

ACOS函数: 反余弦函数

SELECT ACOS(0.789);
执行结果: 0.6616166568777674

ASIN函数: 反正弦函数

SELECT ASIN(0.789);
执行结果: 0.9091796699171293

ATAN函数: 反正切函数

SELECT ATAN(0.789);
执行结果: 0.6679975427240679

CONV函数: 进制转换函数

SELECT CONV(100,10,2);
执行结果: 1100100

SELECT CONV(10101100,2,10);
执行结果: 172

COS函数: 余弦函数,输入为弧度值

SELECT COS(0.789);
执行结果: 0.7045553168836329

COSH函数: 双曲余弦函数

SELECT COSH(0.789);
执行结果: 1.3277464991182242

COT函数: 余切函数

SELECT COT(0.789);
执行结果: 0.992822149200644

EXP函数:指数函数(以e=2.718281828459045为底数)

SELECT EXP(3);
执行结果: 20.085536923187668

RAND函数: 随机数函数,返回double类型的随机数,返回值区间是的0~1

SELECT RAND(99);
执行结果: 0.9610280566667337

ROUND函数: 四舍五入到指定小数点位置

SELECT ROUND(0.789,2);
执行结果: 0.79

FLOOR函数: 向下取整

SELECT FLOOR(9.789);
执行结果: 9

SIN函数: 正弦函数

SELECT SIN(0.789);
执行结果: 0.7096490720426566

SINH函数: 双曲正弦函数

SELECT SINH(0.789);
执行结果: 0.8734476320425288

SQRT函数: 计算平方根

SELECT SQRT(9);
执行结果: 3.0

TAN函数: 正切函数

SELECT TAN(0.789);
执行结果: 1.0072297448290564

TANH函数: 双曲正切函数

SELECT TANH(0.789);
执行结果: 0.65784216537012

TRUNC函数: 截取函数,将输入值截取到指定小数点位置

SELECT TRUNC(987.789,1);
执行结果: 987.7

LN函数: 返回number的自然对数

SELECT LN(20.085536923187668);
执行结果: 3.0

LOG函数: 对数函数

SELECT LOG(2,3);
执行结果: SELECT LOG(2,3);

POW函数: 返回x的y次方,即x^y

SELECT POW(2,3);
执行结果: 8.0

CEIL函数: 向上取整

SELECT CEIL(9.789);
执行结果: 10

3.3、字符串处理函数

CHR函数: 将给定ASCII转换成字符,参数范围是0~255

SELECT CHR(90);
执行结果: Z

CONCAT函数: 字符串连接函数,将参数中的所有字符串连接在一起的结果

SELECT CONCAT('厦门在','福建');
执行结果: 厦门在福建

IN函数: 查看key是否在给定列表中出现

SELECT 99 IN(9,99,999,9999,99999);
执行结果: true

INSTR函数: 计算一个子串在字符串中的位置

SELECT INSTR('崇明在中国的上海','福建');

LENGTH函数: 返回一个字符串的长度

SELECT LENGTH('崇明在中国的上海');

LENGTHB函数: 返回一个字符串的以字节为单位的长度

SELECT LENGTHB('崇明在中国的上海');

MD5函数: 输入字符串的md5值

SELECT MD5('崇明在中国的上海');
执行结果: ac17f49e2f2e778634dee072e1dfc4ac

SPLIT_PART函数: 拆分字符串,返回指定的部分

SELECT SPLIT_PART('福州;厦门;泉州',';',2);
执行结果: 厦门

TO_CHAR函数: 返回对应值的字符串

SELECT TO_CHAR(99.98);

执行结果: 99.98

SUBSTR函数: 返回字符串string1从start_position开始长度为length的子串

SELECT SUBSTR('崇明在中国的上海',7,2);
执行结果: 上海

TOLOWER函数: 字符串转换为小写,输入字符串对应的小写字符串

SELECT TOLOWER('abcDEFGH');
执行结果: abcdefgh

TOUPPER函数: 字符串转换为大写,输入字符串对应的大写字符串

SELECT TOUPPER('abcDEFGH');
执行结果: ABCDEFGH

TRIM函数: 截取两端空格,将输入字符串去除左右空格

SELECT TRIM(' 崇明在中国的上海 ');
执行结果: 崇明在中国的上海

WM_CONCAT函数: 用指定的spearator做分隔符,做字符串类型的连接操作

SELECT WM_CONCAT(';',tt.id) as result
FROM NOTE_INFO_TEST tt
WHERE tt.area = '340000';
执行结果: 2021002;2021004;2021001;2021005;2021003

3.4、聚合函数

AVG函数:主要用来计算包含在特定查询字段中的一组数值的算术平均值。

SELECT AVG(tt.money) AS RESULT FROM NOTE_INFO_TEST tt;

COUNT函数: 用来计算数据集中数值的个数.

SELECT COUNT(1) AS RESULT FROM NOTE_INFO_TEST tt;

MAX函数: 计算最大值

SELECT MAX(tt.money) AS RESULT FROM NOTE_INFO_TEST tt;

MEDIAN函数: 中位数,能够返回给定数值的中值,中值是在一组数值中居于中间的数值,如果参数集合中包含偶数个数字,函数 MEDIAN 将返回位于中间的两个数的平均值。

SELECT MEDIAN(tt.money) AS RESULT FROM NOTE_INFO_TEST tt;

MIN函数: 计算最小值

SELECT MIN(tt.money) AS RESULT FROM NOTE_INFO_TEST tt;

SUM函数: 为值求和

SELECT SUM(tt.money) AS RESULT FROM NOTE_INFO_TEST tt;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/170988.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2-Node.js 内置模块

Node.js 内置模块 简介 之前说过,Node.js 中重要的两句话是 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。 上面两句话,可以使用下面的图片来具体认识。…

【机器学习 - 5】:多元线性回归

文章目录多元线性回归多元线性回归公式推导举例:波士顿房价取特征值RM为例取所有特证为例多元线性回归 多元线性回归方程:特征值为两个或两个以上。 以下是多元线性回归的模型,我们需要求出theta,使得真实值和预测值的差值最小。 …

2023寒假算法集训营1

A. World Final? World Cup! (I) (模拟、枚举) 题意: 给定一个长度为 10 的01串,表示 A、B 双方的点球情况,1 表示罚进,0 表示罚不进。 A 先手,交替罚点球,各罚五次。 得分多者…

C语言字符串操作函数(库函数)及其实现

库函数 函数介绍及模拟实现 1.1strlen 1.2strcpy 1.3strcat 1.4strcmp 1.5strncpy 1.6strncat 1.7strncmp 1.8strstr 1.9strtok 1.10strerror 1.11memcpy 1.12memmove 1.13memcmp 小结 本章重点: 重点介绍处理字符串和字符串的库函数的使用和注意事项…

剑指offer

剑指 Offer 03. 数组中重复的数字 找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字…

格式化输入

1、golang不同输入语句的区别: 特点ScanScanlnScanf从控制台读取内容SscanSscanlnSscanf从指定字符串中读取内容FscanFscanlnFscanf从文本中读取内容特点在读取内容的时候不会关注换行在读取内容的时候, 遇到换行时结束以格式化的方式读取内容,遇到换行…

C++程序用codeblocks集成开发环境生成的exe文件无法运行情况的解决

C程序用codeblocks集成开发环境生成的exe文件无法运行情况的解决 一般是因为你使用是自带mimgw的Code::Blocks版本&#xff0c;对#include<iostream>支持不完善造成的。 测试代码如下&#xff1a; #include <iostream> using namespace std;int main() {cout <…

测试开发 | 通用 api 封装实战,带你深入理解 PO

image1080434 66.5 KB 在普通的接口自动化测试中&#xff0c;如果接口的参数&#xff0c;比如 url&#xff0c;headers等传参改变&#xff0c;或者测试用例的逻辑、断言改变&#xff0c;那么整个测试代码都需要改变。apiobject设计模式借鉴了pageobject的设计模式&#xff0c;可…

3. PyCharm、PyQt5、PyQt5-tools的下载安装、基于PyCharm开发PyQt5

1、 PyCharm的下载安装 为什么选择PyCharm&#xff1f;而不用QtCreator&#xff0c;很明显&#xff0c;QtCreator基于C/QT开发时确实很不错&#xff0c;但是基于Python/QT开发时就显得比较鸡肋了&#xff0c;代码的智能提示&#xff0c;高亮等都没有。。而PyCharm就比较牛逼了…

【GD32F427开发板试用】位带操作实现多线程下的跑马灯

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动&#xff0c;更多开发板试用活动请关注极术社区网站。作者&#xff1a;SmallWhite 一、位带操作 作用&#xff1a;对某一位或者几个连续的位进行操作 前言 我们在使用GD32等单片机时使用到的固件库编程&#xff…

int 和 Integer 有什么区别?为什么要有包装类?

基本数据类型 在 Java 中&#xff0c;一共有 8 种基本类型&#xff08;primitive type&#xff09;&#xff0c;其中有 4 种整型、2 种浮点类型、1 种用于表示 Unicode 编码的字符类型 char 和 1 种用于表示真假值的 boolean 类型。 4 种整型&#xff1a;int、short、long、by…

Godot实现蝴蝶飞舞Shader

前言 我一直在探索在游戏UI中实现特效的方法&#xff0c;如LOL&#xff0c;王者荣耀那种华丽的UI特效。 经过总结有一些方法 1、AE做特效渲染成序列帧供游戏引擎播放 优点&#xff1a;节省资源&#xff0c;适合定制特殊需求 缺点&#xff1a;太大占地方&#xff0c;不好修改…

【H5小游戏】-使用js复刻经典小游戏【接鸡蛋】,快来帮助鸡妈妈找回蛋宝宝吧

接鸡蛋游戏需求&#x1f447;核心玩法&#x1f447;&#x1f447;界面原型&#x1f447;&#x1f447;成品演示&#x1f447;1.游戏演示2.暂停演示游戏开发1.游戏素材准备2.代码实现1.创建index.html页面复刻经典小游戏【接鸡蛋】&#xff0c;快来帮助鸡妈妈找回它的蛋宝宝吧 …

用友BIP与旺店通·企业奇门对接集成采购订单列表查询=>创建采购单(采购订单=>采购单)

用友BIP与旺店通企业奇门对接集成采购订单列表查询>创建采购单(采购订单>采购单-p)来源系统:用友BIP用友BIP助力行业龙头企业、产业链核心企业以及平台型企业建设产业互联网运营平台&#xff0c;通过运营、管理、协同配置和共享资源&#xff0c;实现产业链上下游连接与协…

基于 CartPole-v0 环境的强化学习算法实现(附完整代码)

1.1 CartPole-v0Cart Pole 在 OpenAI 的 gym 模拟器里面是相对比较简单的一个游戏。游戏里面有一个小车&#xff0c;上有 一根杆子。小车需要左右移动来保持杆子竖直。如果杆子倾斜的角度大于 15&#xff0c;那么游戏结束。小车也不 能移动出一个范围&#xff08;中间到两边各 …

03 利用栈进行中缀表达式计算

运算符优先级 ​​​​ 栈内运算符加减乘除取模优先级比栈外优先级大1&#xff0c;例如当23-5时我们往往从左到右计算&#xff0c;即先算再算-&#xff0c;使用中缀表达式两个栈计算就是栈外-优先级低于栈顶&#xff0c;故会弹出运算符和两个操作数进行计算。 中缀表达式计算…

Redis应用技术(3)List和Set在Feed流中的选择

在数据推送的时候,我们使用Feed流 Feed流有三种推送数据的方式(以微博订阅为例) 1.推模式(Push) 将数据在发出后直接推到每个收件箱中.这样会造成发送方的内存占用很大 2.拉模式 用户每次登录后主动的将数据从收件箱中拉去到,会造成用户的负载增加(如果关注的人很多,甚至会导…

SpringCloud——config远程连接github 踩坑

说明 我们现在使用spring cloud config 远程连接github会存在网络跟不上问题&#xff0c;以及本地git密钥问题。 1.github更改了密钥策略原来生成的rsa会导致报错&#xff0c;需要使用命令重新生成ed25519密钥2.配置需要按照上述配置 force-pull: true #这个参数不加可能会有…

Linux系统的启动与关闭

✅作者简介&#xff1a;热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&#xff1a;Java案例分…

vue-循环引用感想

vue-循环引用感想开场-什么是循环引用探讨-怎么用后话如果我们要在主组件中传方法到子组件呢普通的porps传参依赖注入开场-什么是循环引用 刚开始看着这个官方文档上的循环引用十分的不解&#xff0c;意思是什么呢&#xff1f;看着官网的意思&#xff0c;大概举了个文件管理器…