【ClickHouse】如何实现Oracle中的常用功能(持续更新)

之前都是使用Oracle工作的,最近开始必须使用ClickHouse,用得时候发现他们的语句并不是完全一致的,这里简单记录一下。

  1. 获取某个时间值的年度和月度:

  • Oracle:使用EXTRACT()函数;

  • ClickHouse:使用toYear()、toMonth()函数;

----Oracle的实现方式:
SELECT EXTRACT(YEAR FROM A_DATE) AS 年度,
       EXTRACT(MONTH FROM A_DATE) AS 月度 
FROM TEMP;

----ClickHouse的实现方式:
SELECT toYear(A_DATE) AS "年度",
       toMonth(A_DATE) AS "月度" 
FROM TEMP;
  1. group by的时候使用cube或者rollup:

----Oracle的实现方式:
SELECT 年度,月度,COUNT(1) AS CNT 
FROM TEMP 
GROUP BY 年度,CUBE(月度);

SELECT 年度,月度,COUNT(1) AS CNT 
FROM TEMP 
GROUP BY 年度,ROLLUP(月度);

SELECT 年度,月度,COUNT(1) AS CNT 
FROM TEMP 
GROUP BY ROLLUP(年度),月度;

----ClickHouse的实现方式:
SELECT "年度","月度",COUNT(1) AS CNT 
FROM TEMP 
GROUP BY "年度","月度" WITH CUBE;

SELECT "年度","月度",COUNT(1) AS CNT 
FROM TEMP 
GROUP BY "年度","月度" WITH ROLLUP; 
------注意,不能写成[ GROUP BY "年度" WITH ROLLUP,"月度" ]会报错 
  1. 填补空值:

  • Oracle:使用NVL()函数;

  • ClickHouse:使用ifNull()函数,注意此函数字母的大小写;

----Oracle的实现方式:
SELECT T.*,NVL(支出金额,0) FROM TAB T; ------如果“支出金额”字段的某个值是空值,返回0;

----ClickHouse的实现方式:
SELECT T.*,ifNull("支出金额",0) FROM TAB T; ------如果“支出金额”字段的某个值是空值,返回0;

你可能感兴趣的:(ClickHouse,Oracle,数据库,oracle)