本篇文档面向在数据流中编写 SQL 的同学,帮助你:
了解不同节点背后的数据库类型(尤其是 DuckDB)
正确引用预置变量、确认 DuckDB 版本
借助 AI 辅助编写/检查 SQL
快速查阅常用 SQL 函数和语法
数据流中的【SQL转换】节点、【数据转换】节点的【列计算】步骤、【连接器查询】和【数据表查询】节点的 SQL 模式等,都会涉及到 SQL 语言的编写,因此有必要对 SQL 语言有一些基础认识。
不同数据库中的 SQL 语法各有不同,此文档仅以 DuckDB 数据库为例。
【连接器查询】和【数据表查询】节点的 SQL 语法需要符合该节点选择的数据库类型,其他未指定明确数据库的节点,都使用 DuckDB 数据库的 SQL 进行数据处理(例如【SQL转换】节点、【数据转换】节点的【列计算】步骤)。
如何在 SQL 框中引用数据流中的预置变量,详见预置变量章节:
https://docs.deepfos.com/component/deeppipeline/function/variable#sql
在数据流中添加【SQL转换】节点,运行以下语句可得到 DuckDB 版本信息:
SELECT version();

若您的环境部署了 AI 助手,在 SQL 输入框中可以直接使用 AI 助手来编写、分析、检查或重写 SQL:

若未部署 AI 助手,也可自行使用外部 AI 工具进行查询。建议在提示词中指明数据库类型和版本,以降低结果的错误率。
例如以 deepseek 为例,其返回的语句:
list_sort(list_distinct(order_list))
是完全正确的写法。

内部成员可访问语雀文档获取更完整的函数列表和示例: https://proinnova.yuque.com/ys1krd/sa4wgw/tbze6ubagdvgs395
外部用户可进入 SQL 代码框的全屏状态,在左侧查看系统内置的常用函数解释和示例。
以下内容仅为部分常用函数的速查表,后续不会在此表中持续更新,请以语雀文档或系统内展示为准。
| 示例 | 帮助说明 |
|---|---|
| 拼接 (||) | 连接多个字符串或列表,若任一参与拼接的值为 NULL,结果为 NULL。示例 1: 'Duck' || 'DB'结果: DuckDB示例 2: [1, 2, 3] || [4, 5, 6]结果: [1, 2, 3, 4, 5, 6]示例 3: [1, 2, 3] || [4, 5, 6] || NULL结果: NULL |
拼接 (concat) | 连接多个字符串或列表,若 NULL 直接作为参数参与拼接,则会被忽略;若 NULL 是列表中的成员,则保留。示例 1: concat('Hello', ' ', 'World')结果: Hello World示例 2: concat([1, 2, 3], NULL, [4, 5, 6])结果: [1, 2, 3, 4, 5, 6]示例 3: concat([2, 3], [4, NULL, 5, 6], [7], [2, NULL])结果: [2, 3, 4, NULL, 5, 6, 7, 2, NULL] |
拆分 (split) | 将字符串按分隔符拆分为列表。函数别名包括:string_split、str_split、string_to_array,效果相同。示例: split('hello-world', '-')结果: [hello, world] |
|
示例 |
帮助说明 |
|---|---|
|
绝对值( |
返回绝对值,用函数别名 abs(-17.4)17.4@(-17.4)17.4
|
|
四舍五入( |
四舍五入保留 round(42.4332, 2)42.43
|
|
行号( |
为每行生成一个行号,支持分区和区内排序。 row_number() OVER ()row_number() OVER (PARTITION BY Store ORDER BY Amount DESC)
|
|
示例 |
帮助说明 |
|---|---|
|
提取( |
提取日期字段中的年月日等组成部分,提取出的字段类型为整数。 year,月 month,日 day,时 hour,分 minute,秒 second,世纪 century,季度 quarter。extract('year' FROM DATE '1992-01-20')1992extract('quarter' FROM DATE '1992-01-20')1
|
|
格式化( |
将日期字段转换为指定格式的文本。常用格式指定符号(注意大小写): %Y;月:%m;%d(固定两位数,左补 0,例如 01);%-d(不固定位数,例如 1);%H(24 小时制,固定两位数,左补 0);%I(12 小时制,固定两位数,左补 0);%M(固定两位数,左补 0);%S(固定两位数,左补 0)。strftime(now(), '%Y-%m-%d %H:%M:%S')2026-02-11 18:44:17strftime(today, '%a, %-d %B %Y')Wed, 11 February 2026
|
|
今天( |
当前日期(本地时区),不带时分秒(时分秒都是 0)。 today()2022-10-08
|
|
月末( |
返回指定日期所在月份的最后一天,结合天数计算,还可以轻松得出月初日期。 last_day(today())2026-02-28
|
|
天数计算( |
使用加减进行日期间的天数计算。 today() + 52026-02-16today() + INTERVAL 5 DAY2026-02-16today() - 52026-02-06DATE '1992-03-27' - DATE '1992-03-22'5
|
|
示例 |
帮助说明 |
|---|---|
|
现在( |
当前时间。数据流中会转换为 0 时区(UTC)进行显示。以下函数效果相同: now()2026-02-11T11:22:02+00current_timestamp2026-02-11T11:22:02+00get_current_timestamp()2026-02-11T11:22:02+00
|
|
时间戳转换( |
将自 1970-01-01 以来的秒数转换为 0 时区的时间。若是毫秒数,需要先除以 1000,或使用 to_timestamp(1284352323.5)2010-09-13T04:32:03+00epoch_ms(1767198163000)2025-12-31T16:22:43epoch_ms(now())1767198163000
|
|
指定时区( |
返回指定时区的时间戳。 name 列):SELECT * FROM pg_timezone_names();now() AT TIME ZONE 'Asia/Shanghai'2026-02-11T19:42:53.710000timezone('Asia/Shanghai', now())2026-02-11T19:42:53.710000
|
|
示例 |
帮助说明 |
|---|---|
|
空值替换( |
接受任意数量参数,返回第一个非空(非 coalesce(NULL, NULL, 1)1coalesce(10, 20)10coalesce(NULL, NULL)NULL
|
|
空值替换( |
双参数版本的 ifnull(NULL, 'default_string')default_stringifnull(1, 'default_string')1
|
|
判断为空( |
判断是否为空,返回布尔值。 NULL IS NULLtrueNULL IS NOT NULLfalse
|
|
示例 |
帮助说明 |
|---|---|
|
长度( |
返回列表的成员数量, length([1, 2, 3])3len([NULL, 1, 2, 3, NULL])5array_length([NULL, 1, 2, 3, NULL])5
|
|
去重去空( |
去除列表中的所有重复值和 list_distinct([1, 1, NULL, -3, 1, 5])[5, -3, 1]
|
|
去重去空计数( |
列表成员去重、去 list_approx_count_distinct([NULL, 1, 2, 3, 3, NULL])3
|
|
转文本( |
将列表元素拼接为字符串,不去重,保留原顺序。 list_string_agg([3, 3, 9])'3,3,9'
|
|
成员排序( |
对列表中的元素排序。 list_sort([1, 3, NULL, 5, NULL, -5])[NULL, NULL, -5, 1, 3, 5]list_sort([1, 3, NULL, 2], 'ASC')[NULL, 1, 2, 3]list_sort([1, 3, NULL, 2], 'DESC', 'NULLS FIRST')[NULL, 3, 2, 1]list_reverse_sort([1, 3, NULL, 2], 'NULLS LAST')[3, 2, 1, NULL]
|
|
展平( |
展平一层,不会递归展平所有层级,也不会去重或去 flatten([[1, 2], [3, 4]])[1, 2, 3, 4]flatten([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])[[1, 2], [3, 4], [5, 6], [7, 8]]
|
|
解包( |
将列表按一层层级展开为多行,会改变结果集行数。可通过 unnest([1, 2, 3])1、2、3unnest([[[1, 2], [3, 4]], [[5, 6], [7, 8, 9], []], [[10, 11]]], max_depth := 2)[1, 2]、[3, 4]、[5, 6]、[7, 8, 9]、[]、[10, 11]unnest([])unnest(NULL) |
|
筛选( |
从输入列表中筛选使 lambda 函数返回 filter([3, 4, 5], x -> x > 4)[5]filter([1, NULL, 3], x -> x IS NOT NULL)[1, 3]
|
|
区间( |
生成从 range(5)[0, 1, 2, 3, 4]range(2, 5)[2, 3, 4]range(2, 8, 3)[2, 5]
|
|
示例 |
帮助说明 |
|---|---|
|
类型转换( |
标准语法: VARCHAR,指定精度小数 DECIMAL(总长度, 小数位数),整数 INTEGER,布尔值 BOOLEAN,日期 DATE。CAST(column AS VARCHAR)column::DOUBLE
|
|
条件判断( |
CASE WHEN i > 2 THEN 1 ELSE 0 ENDIF(i > 2, 1, 0)CASE WHEN i = 1 THEN 10 WHEN i = 2 THEN 20 ELSE 0 END
|
根据版本信息,可访问 DuckDB 官网获得对应版本的语法帮助。以 1.2 版本为例:
DuckDB 1.2 版本函数总览文档:

访问其中的具体章节,可为您的具体问题提供更多建议。
例如想查找更多日期格式指定符号,可进入日期时间相关章节:

回到顶部
咨询热线
