圣诞快乐: 用 GaussDB T 绘制一颗圣诞树,兼论高斯数据库语法兼容

举报
社会主义的一块砖 发表于 2019/12/25 18:49:32 2019/12/25
【摘要】 转眼就是圣诞的节日,祝大家节日快乐。用 GaussDB T (也就是 GaussDB 100)绘制一棵圣诞树,纯国产,更喜庆。话不多说,上图:SQL如下:SELECT CASE WHEN ENMOTECH = 1 THEN lpad('*', GAO, ' ') ELSE lpad(' ', GAO + 1-ENMOTECH, ' ') || rpad('*', lag(ENMOTECH) ...

转眼就是圣诞的节日,祝大家节日快乐。用 GaussDB T (也就是 GaussDB 100)绘制一棵圣诞树,纯国产,更喜庆。

话不多说,上图:

PIC 2.jpg

SQL如下:

SELECT
	CASE WHEN ENMOTECH = 1 THEN lpad('*',
	GAO,	' ')	ELSE lpad(' ',
	GAO + 1-ENMOTECH,	' ') || rpad('*',
	lag(ENMOTECH) OVER (PARTITION BY 1ORDER BY
	ENMOTECH) + ENMOTECH -2,	'*')END "圣诞快乐!"FROM(SELECT
	LEVEL ENMOTECH ,	MAX(LEVEL) OVER (PARTITION BY 1) GAOFROM dualCONNECT BY LEVEL < 19 )UNION ALLSELECT
	lpad(lpad('*',3,'*'),19)FROM dualCONNECT BY LEVEL < 5;

主要,这段 SQL 代码,和 Oracle 完全兼容,在 Oracle 中执行效果如下:
PIC 3.jpg

总结一下,在使用了非常特殊的查询语法后,GaussDB 工作的非常愉快:

Case When;
LAG 分析函数;
CONNECT by;

当然,杨长老说了,我这棵圣诞树不太好看,他根据公司的祝贺图重新画了一个,杨长老说圣诞树应该是这样的:
mmexport1577161304307.png

再来图:
PIC 4.jpg

上代码:

WITH leaf AS (SELECT
	lpad(rpad('*',
	(ROWNUM-1)* 2 + 1,	'*'),	ROWNUM + 20) leaf,	ROWNUMFROM
	dualCONNECT BY
	LEVEL <= 3),
lv AS (SELECT
	ROWNUM lvFROM
	dualCONNECT BY
	LEVEL <= 5),
leafs AS (SELECT
	lpad(rpad('*',
	(ROWNUM-1)* 2 + 1 +(lv-1)* 2,	'*'),	ROWNUM + 20 + lv) leafFROM
	leaf,
	lv),
root AS (SELECT
	lpad(rpad('*',	5,	'*'),	24)FROM
	dualCONNECT BY
	LEVEL <= 4)SELECT
	leafFROM
	leafsUNION ALLSELECT
	*FROM
	root;

祝大家圣诞快乐,万事如意,平平安安!



本文转自“墨天轮”GaussDB频道

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。