51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

DataEase v2 SQL 习惯汇总

v2.x 注意事项

v2.x 使用 Apache Calcite 连接数据源,编写 SQL 获取数据时,需要遵循 Calcite 语法;

以下是已知的语法调整,将持续更新。

IF 关键字 {#heading-1}

标准 SQL中使用了 IF 关键字:

SELECT
    create_time,
    IF ( pay_method = '支付宝', '线上支付', '线下支付' ) 渠道,
    pay_method
FROM
    transactions
ORDER BY
    create_time DESC
    LIMIT 3

*** ** * ** ***


`create_time             渠道         pay_method
2024-06-02 11:11:11     线上支付        支付宝
2024-05-02 11:11:11     线下支付        云闪付
2024-04-02 11:11:11     线下支付        微信`

Calcite 不支持此关键字,v2.x 调整写法,使用 CASE WHEN 来代替:

SELECT
    create_time,
    CASE pay_method WHEN '支付宝' THEN '线上支付' ELSE '线下支付' END 渠道,
    pay_method
FROM
    transactions
ORDER BY
    create_time DESC
    LIMIT 3

*** ** * ** ***


`create_time             渠道         pay_method
2024-06-02 11:11:11     线上支付        支付宝
2024-05-02 11:11:11     线下支付        云闪付
2024-04-02 11:11:11     线下支付        微信`


13位时间戳转换 {#heading-2}

标准 SQL 直接使用 from_unixtime

SELECT
  create_time,
  from_unixtime( create_time / 1000 ) AS formatted_date
FROM
    dataset_table

*** ** * ** ***


`create_time      formatted_date
1709116580965   2024-02-28 10:36:20.9650
1664443534295   2022-09-29 09:25:34.2950
1664441241002   2022-09-29 08:47:21.0020`

v2.x 调整写法,from_unixtime(CAST(`last_update_time` AS BIGINT), 'yyyy-MM-dd HH:mm:ss')

SELECT 
    create_time,
    from_unixtime( CAST( `create_time` AS BIGINT ), 'yyyy-MM-dd HH:mm:ss' ) AS formatted_date
FROM
    dataset_table

*** ** * ** ***


`create_time      formatted_date
1709116580965   2024-02-28 10:36:20
1664443534295   2022-09-29 09:25:34
1664441241002   2022-09-29 08:47:21`


DATEDIFF 函数 {#heading-3}

标准 SQL 支持 datediff 函数,如下:

select
   datediff(endtime,begintime) as diffday
from yanz

*** ** * ** ***


`begintime               endtime                 diffday
2024-02-27 10:55:26     2024-02-29 10:55:32     2
2024-02-01 10:55:43     2024-02-23 10:55:47     22
`

v2.x Calcite 不支持 datediff 函数,调整写法:

select
  begintime,
  endtime,
  FLOOR((UNIX_TIMESTAMP(`endtime`) - UNIX_TIMESTAMP(`begintime`)) / (1000*24 * 60 * 60)) AS `diffday`
from yanz

*** ** * ** ***


`begintime               endtime                 diffday
2024-02-27 10:55:26     2024-02-29 10:55:32     2
2024-02-01 10:55:43     2024-02-23 10:55:47     22`

DATE_FORMAT 函数 {#heading-4}

标准 SQL 支持 data_format 函数,如下:

SELECT
    create_time,
    date_format( create_time, '%Y-%m' ) as yearm
FROM
    transactions
    LIMIT 2

*** ** * ** ***


`create_time            yearm
2023-04-19 16:17:00    2023-04
2023-04-19 17:17:00    2023-04`

Calcite 不支持 date_format 函数,v2.x 版本增加需要在数据集中新建计算字段,示例如下:

DE_DATE_FORMAT(CURRENT_DATE,'yyyy-MM')

SUBSTR 函数 {#heading-5}

标准 SQL 支持 substr 函数,如下:

SELECT
    city,
    substr( city, 1, 2 ) AS cit
FROM
    transactions
    LIMIT 3;

*** ** * ** ***


`city    cit
潍坊市 潍坊
淄博市 淄博
日照市 日照`

v2.x 版本的 Calcite 不支持 substr 函数,可以使用标准 SQL 中的 SUBSTRING 函数,因为很多 SQL 方言都支持这个标准 SQL 函数:

SELECT
    province,
    city,
    SUBSTRING( city FROM 1 FOR 2 ) AS cit
FROM
    transactions
    LIMIT 3;

*** ** * ** ***


`city    cit
潍坊市 潍坊
淄博市 淄博
日照市 日照`


赞(0)
未经允许不得转载:工具盒子 » DataEase v2 SQL 习惯汇总