暂无图片
暂无图片
7
暂无图片
暂无图片
暂无图片

YashanDB YCP 培训笔记之内置函数

原创 virvle 2024-04-17
860

很荣幸能参加第一届YCP的认证培训和考试,今天培训资料到手,就迫不急的装了YashanDB,跟着课程的节奏来练练
内置函数很多,后续当小手册用吧

一、崖山数据库简介

崖山数据库系统YashanDB是深圳计算科学研究院完全自主研发设计的新型数据库系统,融入原创理论,支持单机/主备、共享集群、分布式等多种部署方式,覆盖OLTP/HTAP/OLAP交易和分析混合负载场景,为客户提供一站式的企业级融合数据管理解决方案。

二、YCP的报名及培训

三月上旬结束了YCA的培训和考证,在大家的纷纷期盼中,3月29日首届YCP重磅上线,上线半小时不到,限额150个秒空,很荣幸抢到一个名额【偷着乐 _】。
本次培训的内容依然很丰富和系统,老师也很专业,知识点讲解透彻,感谢老师们,感谢YashanDB!。

1. YCP报名链接如下:

【本次名额已满,没报上的敬请关注YashanDB公众号】
https://mp.weixin.qq.com/s/B5TFmAuxbwt8O97tGYMGaw
还没考YCA的可以登录官方网址报名,限时免费:https://www.yashandb.com/learning_center

2. 授课模式:

本次培训采用录播课程+个人版体验+讲师直播答疑结合的形式进行,分为课程学习-认证考试-证书领取三大阶段,以下是本次培训的时间安排:
📚课程学习:4月16日-4月25日
大家可以通过登录YashanDB培训平台观看线上录播视频进行学习,小助手会每天提醒大家上课。

3. 💡直播答疑:

时间安排:4月17日-4月19日、4月22日-4月25日
19:00-20:00期间,讲师每天为大家讲解课后习题,并为大家进行直播答疑。

4. ✏认证考试:4月26日-4月27日

YCP认证考试科目分为《笔试考核》和《实操考核》2个科目
《笔试考核》成绩达70分,且《实操考核》成绩均达70分,为通过认证考试

三、课程大纲

YCP课程大纲:
第一章 YashanDB基础介绍
第二章 YashanDB SQL语言(进阶篇)
第三章 YashanDB对象管理( 进阶篇)
第四章 YashanDB数据库安全性(基础篇)
第五章 YashanDB数据库迁移
第六章 YashanDB运维监控管理平台
第七章 YashanDB备份恢复(基础篇)
第八章 YashanDB优化(基础篇)

言归正传,下面来看看第二章找那中YashanDB的内置函数,若熟悉oracle的,会发现兼容性很高。个人感觉,在学习yashanDB过程中,更多的是在补充以前的盲区和联通已有的知识点,真的受益匪浅。

四、先上的思维导图,对内置函数有个概览先

6e6b948bed6254222a433431bca91072_720.jpg

五、创建测试数据

-- 创建测试表 create table t2 (no int,name varchar2(30),items varchar2(30),scopes int); -- 插入测试数据 insert into t2 values (1,'San','数学',98); insert into t2 values (2,'San','语文',88); insert into t2 values (3,'San','英语',70); insert into t2 values (4,'Jetty','数学',100); insert into t2 values (5,'Jetty','语文',88); insert into t2 values (6,'Jetty','英语',70); insert into t2 values (7,'Ran','数学',75); insert into t2 values (8,'Ran','语文',88); insert into t2 values (9,'Ran','英语',100);

image.png

六、YashanDB 内置函数【重点来了】

1. 转换函数

1.1 转换字符大小写

SQL> select lower('Yashan'),upper('Yashan') from dual; LOWER('YASHAN') UPPER('YASHAN') --------------- --------------- yashan YASHAN 1 row fetched.

1.2 获取字符串长度(按字符、按bit)

SQL> select length('Yashan'),bit_length('Yashan') from dual; LENGTH('YASHAN') BIT_LENGTH('YASHAN') --------------------- --------------------- 6 48 1 row fetched.

1.3 多个字符串或者说多列拼接(3个函数比对:是否可指定分隔符,以及返回的数据类型)

表达式的个数2到4096个

SQL> select concat('Yashan','DB'),concat_ws('-','Yashan','DB') from dual; CONCAT('YASHAN','DB' CONCAT_WS('-','YASHA -------------------- -------------------- YashanDB Yashan-DB 1 row fetched.

划重点:string_agg返回clob类型

SQL> select string_agg(name,',') from t2; STRING_AGG(NAME,',') ---------------------------------------------------------------- San,San,San,Jetty,Jetty,Jetty,Ran,Ran,Ran 1 row fetched.

1.4 获取字符串

-- 从左或右开始获取指定长度;按分割字符串 SQL> select left(name,3),right(name,3),split(name,'et',2) from t2 where no=4; LEFT(NAME,3) RIGHT(NAME,3) SPLIT(NAME,'ET',2) --------------------------------- --------------------------------- --------------------------------- Jet tty ty 1 row fetched.

2. 聚集函数

如备注,获取平均数,最大数,最小数,求和,多行拼接

SQL> select avg(scopes) 平均分,max(scopes) 最高分,min(scopes) 最低分 ,sum(scopes) 总成绩,wm_concat(scopes) 列出所有分数 from t2 where items='数学'; 平均分 最高分 最低分 总成绩 列出所有分数 ----------- ------------ ------------ ----------- ------------------------------- 91 100 75 273 98,100,75 1 row fetched.

3. 窗口函数

语法,直接引用YCP课件上的了

image.png

image.png

2.1 row_number

-- 按items分组,并按分数排序 SQL> select no,name,scopes,items,row_number() over (partition by items order by scopes) row_number from t2; NO NAME SCOPES ITEMS ROW_NUMBER ------------ --------------------------------- ------------ --------------------------------- --------------------- 7 Ran 75 数学 1 1 San 98 数学 2 4 Jetty 100 数学 3 3 San 70 英语 1 6 Jetty 70 英语 2 9 Ran 100 英语 3 2 San 88 语文 1 5 Jetty 88 语文 2 8 Ran 88 语文 3 9 rows fetched. -- 如上结果,最后对结果再做一次排序 SQL> select no,name,scopes,items,row_number() over (partition by items order by scopes) row_number from t2 order by row_number, items; NO NAME SCOPES ITEMS ROW_NUMBER ------------ --------------------------------- ------------ --------------------------------- --------------------- 7 Ran 75 数学 1 3 San 70 英语 1 2 San 88 语文 1 1 San 98 数学 2 6 Jetty 70 英语 2 5 Jetty 88 语文 2 4 Jetty 100 数学 3 9 Ran 100 英语 3 8 Ran 88 语文 3 9 rows fetched. -- 按1分组(就一组,(●'◡'●)),再按分数排序 SQL> select no,name,scopes,items,row_number() over (partition by 1 order by scopes) row_number from t2 order by row_number, items; NO NAME SCOPES ITEMS ROW_NUMBER ------------ --------------------------------- ------------ ------------------------- ------------------- 3 San 70 英语 1 6 Jetty 70 英语 2 7 Ran 75 数学 3 2 San 88 语文 4 5 Jetty 88 语文 5 8 Ran 88 语文 6 1 San 98 数学 7 4 Jetty 100 数学 8 9 Ran 100 英语 9 9 rows fetched.

2.2 函数rank,dense_rank

SQL> select no,name,scopes,items,rank() over (partition by 1 order by scopes) rank from t2 ; NO NAME SCOPES ITEMS RANK ------------ -------------------------- ------------ --------------------------- --------------------------- 3 San 70 英语 1 6 Jetty 70 英语 1 7 Ran 75 数学 3 2 San 88 语文 4 5 Jetty 88 语文 4 8 Ran 88 语文 4 1 San 98 数学 7 4 Jetty 100 数学 8 9 Ran 100 英语 8 9 rows fetched. SQL> select no,name,scopes,items,dense_rank() over (partition by 1 order by scopes) dense_rank from t2 ; NO NAME SCOPES ITEMS DENSE_RANK ------------ --------------------------------- ------------ ------------------ --------------------- 3 San 70 英语 1 6 Jetty 70 英语 1 7 Ran 75 数学 2 2 San 88 语文 3 5 Jetty 88 语文 3 8 Ran 88 语文 3 1 San 98 数学 4 4 Jetty 100 数学 5 9 Ran 100 英语 5 9 rows fetched.

2.3 first_values 获取第一,last_values 获取倒数第一

SQL> select no,name,items,scopes,first_value(scopes) over (partition by items order by scopes desc) scopes2 from t2 ; NO NAME ITEMS SCOPES SCOPES2 ------------ --------------------------------- --------------------------------- ------------ ------------ 4 Jetty 数学 100 100 1 San 数学 98 100 7 Ran 数学 75 100 9 Ran 英语 100 100 3 San 英语 70 100 6 Jetty 英语 70 100 2 San 语文 88 88 5 Jetty 语文 88 88 8 Ran 语文 88 88 9 rows fetched. -- 默认模式,直接获取当前行的 SQL> select no,name,items,scopes,last_value(scopes) over (partition by items order by scopes desc) scopes2 from t2 ; NO NAME ITEMS SCOPES SCOPES2 ------------ --------------------------------- --------------------------------- ------------ ------------ 4 Jetty 数学 100 100 1 San 数学 98 98 7 Ran 数学 75 75 9 Ran 英语 100 100 3 San 英语 70 70 6 Jetty 英语 70 70 2 San 语文 88 88 5 Jetty 语文 88 88 8 Ran 语文 88 88 9 rows fetched. -- 指定窗口后,再看 SQL> select no,name,items,scopes,last_value(scopes) over (partition by items order by scopes desc ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) scopes2 from t2 ; NO NAME ITEMS SCOPES SCOPES2 ------------ --------------------------------- --------------------------------- ------------ ------------ 4 Jetty 数学 100 75 1 San 数学 98 75 7 Ran 数学 75 75 9 Ran 英语 100 70 3 San 英语 70 70 6 Jetty 英语 70 70 2 San 语文 88 88 5 Jetty 语文 88 88 8 Ran 语文 88 88 9 rows fetched.

3.3 窗口函数性能优于子查询,数据量越大越明显

PS:【后续再实验】,感兴趣的自行上 ,(●’◡’●)

4. 表函数

PS: (据说只适用于分布式),单机版的我,忽略了

PX_CHANNEL表函数:根据输入的sessionid,查询返回该连接会话下的tabqueue通道信息。
PX_OBJ表函数:根据输入的sessionid,查询返回该连接会话下的并行stage信息。

5. 字符函数

5.1 replace替换函数,position定位字符串第一次出现的位置

SQL> select name,replace(name,'an','unny') 替换函数, position('t' in name) t位置 from t2 where no=4; NAME 替换函数 T位置 --------------------------------- ----------------------- --------------------- Jetty Jetty 3 1 row fetched.

5.2 首字母大写

SQL> select initcap('heLLo world,my name is 崖山') from dual; INITCAP('HELLOWORLD, --------------------------------- Hello World,My Name Is 崖山 1 row fetched.

5.3 正则表达式

f245b7655ff71e576558420edd8b9515.png
PS:篇幅有些长,下次再分享

6. 日期函数

6.1 计算月份,加的月份正负都可以

SQL> select sysdate,add_months(sysdate,3),add_months(sysdate,-2) from dual; SYSDATE ADD_MONTHS(SYSDATE,3 ADD_MONTHS(SYSDATE,- -------------------------------- -------------------------------- -------------------------------- 2024-04-16 2024-07-16 2024-02-16 1 row fetched.

6.2 间隔年月

SQL> select sysdate, age(to_date('2020-01-01','yyyy-mm-dd')) as 距今年月, age(to_date('2010-01-01','yyyy-mm-dd'),to_date('2020-01-01','yyyy-mm-dd')) as 间隔年月 from dual; 2 3 4 SYSDATE 距今年月 间隔年月 -------------------------------- --------------- --------------- 2024-04-16 +04-03 -10-00 1 row fetched.

6.3 获取当前时钟,timestamp格式

SQL> select current_timestamp() res from dual; RES ---------------------------------------------------------------- 2024-04-16 12:36:33.557061 1 row fetched.

6.4 日期格式化转换

SQL> select date('April,17,2024,02:38 A.M.','Month,dd,YY,HH:MI A.M.') , date('2024-04-16 23:56:59','yyyy-mm-dd HH24:mi:ss') res from dual; 2 DATE('APRIL,17,2024, RES -------------------------------- -------------------------------- 2024-04-17 2024-04-16 1 row fetched.

6.5 日期计算,SYSDATE获取当前日期

SQL> select last_day(date '2024-03-26'+10),dayofweek(date '2024-04-17') res,sysdate from dual; LAST_DAY(DATE'2024-0 RES SYSDATE -------------------------------- ------------ -------------------------------- 2024-04-30 4 2024-04-16 1 row fetched.

7. 其他函数

7.1 非空判断

SQL> select isnull(''),isnull('a') from dual; ISNULL('') ISNULL('A') -------------------- -------------------- true false

7.2 非空处理(比对:参数个数)

-- ifnull 与 nvl类似:第一个为空,则返回第2个参数 SQL> select ifnull('','a'),ifnull('a','b'),ifnull('','') from dual; IFNULL('','A') IFNULL('A','B') IFNULL('','') -------------- --------------- ------------- a a 1 row fetched. SQL> select nvl('a','b'),nvl('','b'),nvl('','') from dual; NVL('A','B') NVL('','B') NVL('','') ------------ ----------- ---------- a b 1 row fetched. -- 返回第一个非空参数 SQL> select nvl2('a','b','c'),nvl2('','b','c') from dual; NVL2('A','B','C') NVL2('','B','C') ----------------- ---------------- b c 1 row fetched.

7.3 获取数列最大、最小值

SQL> select greatest(89,3,24,67,58741) ,least(89,3,24,67,58741) from dual; GREATEST(89,3,24,67, LEAST(89,3,24,67,587 -------------------- -------------------- 58741 3 1 row fetched.

8. 常见报错信息

8.1 参数个数错误

SQL> select nvl2('a','b','c','d'),nvl2('','b','c','d') from dual; [1:8]YAS-04323 arguments count must be 3 SQL> select ifnull('a','b','c','d'),ifnull('','b','c','d') from dual; [1:8]YAS-04323 arguments count must be 2

8.2 不存在或者未定义

SQL> select greatest(scopes) ,least(scopes) from t2 where item='数学'; [1:54]YAS-04243 invalid identifier "ITEM"

8.3 提示类型转换错误,指出在“hour"

SQL> select date('April,17,2024,00:38 A.M.','Month,dd,YY,HH:MI A.M.') from dual; [1:9]YAS-00008 type convert error : not a valid hour

8.4 已存在对象

SQL> create table t (no int,name varchar2(30),items varchar2(30),scopes int); [1:14]YAS-02013 name is already used by an existing object

8.4 意外的单词,指定是 “items”

SQL> select no,name,scopes,items,row_number() over (partition by items order by scopes) row_number from t2 order by row_number items; [1:123]YAS-04209 unexpected word items

先介绍到此,篇幅有点长,大家看看思维导图和目录哈

最后修改时间:2024-04-22 11:01:32
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论