很荣幸能参加第一届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过程中,更多的是在补充以前的盲区和联通已有的知识点,真的受益匪浅。
四、先上的思维导图,对内置函数有个概览先

五、创建测试数据
-- 创建测试表
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);

六、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课件上的了


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 正则表达式

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
先介绍到此,篇幅有点长,大家看看思维导图和目录哈




