公式语法和函数
公式语法和函数 - Notion 中文教程
文章目录
公式语法和函数

Notion 的公式支持操作多种属性和函数。以下是完整列表 ➗
目录
- 属性
- 内置函数
- 函数
想先了解公式基础?查看这篇入门指南:
Notion 的公式支持操作多种属性和函数。以下是完整列表!
属性
公式支持多种属性类型。对于不直接支持的类型,数据会自动转换为兼容格式(通常是文本)。
| 属性类型 | 示例 | 公式类型 |
|---|---|---|
| Title | prop("Title")prop("Title").length() | Text |
| Text | prop("Text")prop("Text").length() | Text |
| Select | prop("Priority") == "High" | Text |
| Multi-Select | prop("Tags").length()prop("Tags").includes("Finance") | Text |
| Checkbox | prop("Checkbox")not prop("Checkbox") | Boolean |
| Email, URL, Phone Number | !empty(prop("Phone"))!empty(prop("Email"))link("Call", "tel:" + prop("Phone")) | Text |
| Unique ID | prop("Task ID").split("-").first() ← Prefixprop("Task ID").split("-").last() ← ID | Text |
| Created By, Edited By | prop("Created By").name()prop("Created By").email() | Person |
| Person | prop("Person")prop("Person").at(0).name()prop("Person").map(current.email()) | Person |
| Date, Created Time, Last Edited Time | prop("Due Date") > now()dateBetween(prop("Birthday"), now(), "days") | Date |
| Number | prop("Number") / 2pi() * prop("Radius") ^ 2 | Number |
| Relation | prop("Tasks").length()prop("Tasks").filter(current.prop("Status") !== "Done") | Page |
| Rollup | prop("Purchases").length()prop("Average cost") * 12 | Number, date, or list of any type. 取决于 Rollup 配置。 |
内置函数是编程语言中预定义的符号和值,用于辅助计算。
| 内置项 | 示例 |
|---|---|
Math operators: +, -, *, % | 2 * pi()"hello" + "world" |
Boolean values: true, false | truefalse |
Comparison operators: ==, >, >=, <, <= | 123 == 123 → true"Notion" == "Motion" → false |
Logical operators: and, or, not | and:true and falsetrue && falseand(true, false)or:true or falseor(true, false)not:not true!true |
Ternary operator: ? : | X ? Y : Z 等价于 if(X, Y, Z) |
Notion 公式支持以下函数。
| Name | Description | Example |
|---|---|---|
| if | 条件为真时返回第一个值,否则返回第二个值。 | if(true, 1, 2) → 1if(false, 1, 2) → 2prop("Checked") == true ? "Complete" : "Incomplete" |
| ifs | 返回第一个为真条件对应的值。可替代多层嵌套 if()。 | ifs(true, 1, true, 2, 3) → 1ifs(false, 1, false, 2, 3) → 3 |
| empty | 值为空时返回 true。0、""、[] 均视为空。 | empty(0) → trueempty([]) → true |
| length | 返回文本或列表的长度。 | length("hello") → 5length([1, 2, 3]) → 3 |
| substring | 返回从起始索引(含)到结束索引(不含)的子字符串。结束索引可选。 | substring("Notion", 0, 3) → "Not"substring("Notion", 3) → "ion" |
| contains | 若值包含搜索字符串,返回 true。 | contains("Notion", "ot") → true |
| test | 若值匹配正则表达式,返回 true,否则返回 false。 | test("Notion", "Not") → truetest("Notion", "\\d") → false |
| match | 返回正则表达式所有匹配项组成的列表。 | match("Notion Notion", "Not") → ["Not", "Not"]match("Notion 123 Notion 456", "\\d+") → ["123", "456"] |
| replace | 将第一个正则匹配项替换为指定值。 | replace("Notion Notion", "N", "M") → "Motion Notion" |
| replaceAll | 将所有正则匹配项替换为指定值。 | replaceAll("Notion Notion", "N", "M") → "Motion Motion"replaceAll("Notion 123", "\\d", "") → "Notion" |
| lower | 将文本转为小写。 | lower("NOTION") → "notion" |
| upper | 将文本转为大写。 | upper("notion") → "NOTION" |
| repeat | 将文本重复指定次数。 | repeat("0", 4) → "0000"repeat("~=", 10) → "~=~=~=~=~=~=~=~=~=~=" |
| link | 根据标签文本和 URL 创建超链接。 | link("Notion", "https://notion.so") → Notion |
| style | 为文本添加样式和颜色。 有效样式: "b"(粗体)、"u"(下划线)、"i"(斜体)、"c"(代码)、"s"(删除线)。有效颜色: "gray"、"brown"、"orange"、"yellow"、"green"、"blue"、"purple"、"pink"、"red"。在颜色后加 "_background" 可设置背景色。 | style("Notion", "b", "u") → Notionstyle("Notion", "blue", "gray_background") |
| unstyle | 移除文本的格式样式。若未指定样式,则移除所有样式。 | unstyle("Text")unstyle("Text", "b") |
| format | 将值格式化为文本。 | format(1234) → "1234"format(now()) → "August 30, 2023 17:55" |
| add | 返回两数之和。 | add(5, 10) → 155 + 10 → 15 |
| subtract | 返回两数之差。 | subtract(5, 10) → -55 - 10 → -5 |
| multiply | 返回两数之积。 | multiply(5, 10) → 505 * 10 → 50 |
| mod | 返回第一个数对第二个数取模的结果。 | mod(5, 10) → 55 % 10 → 5 |
| pow | 返回底数的指数次幂。 | pow(5, 10) → 97656255 ^ 10 → 9765625 |
| divide | 返回两数之商。 | divide(5, 10) → 0.55 / 10 → 0.5 |
| min | 返回参数中的最小值。 | min(1, 2, 3) → 1min([1, 2, 3]) → 1 |
| max | 返回参数中的最大值。 | max(1, 2, 3) → 3max([1, 2, 3]) → 3 |
| sum | 返回所有参数之和。 | sum(1, 2, 3) → 6sum([1, 2, 3], 4, 5) → 15 |
| abs | 返回数的绝对值。 | abs(10) → 10abs(-10) → 10 |
| round | 返回四舍五入到最近整数的值。 | round(0.4) → 0round(-0.6) → -1 |
| ceil | 返回大于或等于该数的最小整数。 | ceil(0.4) → 1ceil(-0.6) → 0 |
| floor | 返回小于或等于该数的最大整数。 | floor(0.4) → 0floor(-0.6) → -1 |
| sqrt | 返回数的正平方根。 | sqrt(4) → 2sqrt(7) → 2.6457513110645907 |
| cbrt | 返回数的立方根。 | cbrt(9) → 2.080083823051904cbrt(64) → 4 |
| exp | 返回 e^x,其中 x 为参数,e 是自然对数的底(约 2.718…)。 | exp(1) → 2.718281828459045exp(-1) → 0.36787944117144233 |
| ln | 返回数的自然对数。 | ln(2.718281828459045) → 1ln(10) → 2.302585092994046 |
| log10 | 返回数以 10 为底的对数。 | log10(10) → 1log10(100000) → 5 |
| log2 | 返回数以 2 为底的对数。 | log2(4) → 2log2(1024) → 10 |
| sign | 数大于 0 返回 1,小于 0 返回 -1,等于 0 返回 0。 | sign(-10) → -1sign(10) → 1 |
| pi | 返回圆周率(圆周长与直径之比)。 | pi() → 3.141592653589793 |
| e | 返回自然对数的底。 | e() → 2.718281828459045 |
| toNumber | 将文本解析为数字。 | toNumber("2") → 2toNumber(now()) → 1693443300000toNumber(true) → 1 |
| now | 返回当前日期和时间。 | now() → @August 30, 2023 5:55 PM |
| minute | 返回日期的分钟数(0–59)。 | minute(parseDate("2023-07-10T17:35Z")) → 35 |
| hour | 返回日期的小时数(0–23)。 | hour(parseDate("2023-07-10T17:35Z")) → 17 |
| day | 返回日期的星期几(1 = 周一,7 = 周日)。 | day(parseDate("2023-07-10T17:35Z")) → 1 |
| date | 返回日期的月份中的日(1–31)。 | date(parseDate("2023-07-10T17:35Z")) → 10 |
| week | 返回日期的 ISO 周数(1–53)。 | week(parseDate("2023-01-02")) → 1 |
| month | 返回日期的月份(1–12)。 | month(parseDate("2023-07-10T17:35Z")) → 7 |
| year | 返回日期的年份。 | year(now()) → 2023 |
| dateAdd | 向日期添加时间。单位可为:"years"、"quarters"、"months"、"weeks"、"days"、"hours"、"minutes"。 | dateAdd(now(), 1, "days") → @August 31, 2023 5:55 PMdateAdd(now(), 2, "months") → @October 30, 2023 5:55 PMdateAdd(now(), 3, "years") → @August 30, 2026 5:55 PM |
| dateSubtract | 从日期中减去时间。单位同 dateAdd。 | dateSubtract(now(), 1, "days") → @August 29, 2023 5:55 PMdateSubtract(now(), 2, "months") → @June 30, 2023 5:55 PMdateSubtract(now(), 3, "years") → @August 30, 2020 5:55 PM |
| dateBetween | 返回两日期之差。单位同 dateAdd。 | dateBetween(now(), parseDate("2022-09-07"), "days") → 357dateBetween(parseDate("2030-01-01"), now(), "years") → 6 |
| dateRange | 根据起始和结束日期构造日期范围。 | dateRange(prop("Start Date"), prop("End Date")) → @September 7, 2022 → September 7, 2023 |
| dateStart | 返回日期范围的起始日期。 | dateStart(prop("Date Range")) → @September 7, 2022dateBetween(dateStart(prop("Date Range")), dateEnd(prop("Date Range")), "days") → -365 |
| dateEnd | 返回日期范围的结束日期。 | dateEnd(prop("Date range")) → @September 7, 2023dateBetween(dateEnd(prop("Date Range")), dateStart(prop("Date Range")), "days") → 365 |
| timestamp | 返回当前 Unix 时间戳(自 1970 年 1 月 1 日以来的毫秒数)。 | timestamp(now()) → 1693443300000 |
| fromTimestamp | 根据 Unix 时间戳返回日期。注意:返回的日期不保留秒和毫秒。 | fromTimestamp(1689024900000) → @July 10, 2023 2:35 PM |
| formatDate | 按自定义格式字符串格式化日期。支持:"YYYY"(年)、"MM"(月)、"DD"(日)、"HH"(时)、"mm"(分)。 | formatDate(now(), "MMMM D, Y") → "August 30, 2023"formatDate(now(), "MM/DD/YYYY") → "08/30/2023"formatDate(now(), "HH:mm A") → "17:55 PM" |
| parseDate | 按 ISO 8601 标准解析日期。 | parseDate("2022-01-01") → @January 1, 2022parseDate("2022-01-01T00:00Z") → @December 31, 2021 4:00 PM |
| name | 返回人员的姓名。 | name(prop("Created By"))prop("Pioneers").map(name(current)).join(", ") → "Grace Hopper, Ada Lovelace" |
| 返回人员的邮箱地址。 | email(prop("Created By"))prop("People").map(email(current)).join(", ") | |
| at | 返回列表中指定索引的值。 | at([1, 2, 3], 1) → 2 |
| first | 返回列表的第一项。 | first([1, 2, 3]) → 1 |
| last | 返回列表的最后一项。 | last([1, 2, 3]) → 3 |
| slice | 返回列表中从起始索引(含)到结束索引(不含)的子列表。结束索引可选。 | slice([1, 2, 3], 1, 2) → [2]slice(["a", "b", "c"], 1) → ["b", "c"] |
| concat | 合并多个列表。 | concat([1, 2], [3, 4]) → [1, 2, 3, 4]concat(["a", "b"], ["c", "d"]) → ["a", "b", "c", "d"] |
| sort | 返回排序后的列表。 | sort([3, 1, 2]) → [1, 2, 3] |
| reverse | 返回反转后的列表。 | reverse(["green", "eggs", "ham"]) → ["ham", "eggs", "green"] |
| join | 将列表值用指定分隔符合并为文本。 | join(["a", "b", "c"], ", ") → "a, b, c"join(["dog", "go"], "") → "doggo" |
| split | 按分隔符将文本拆分为列表。 | split("apple,pear,orange", ",") → ["apple", "pear", "orange"] |
| unique | 返回输入列表中的唯一值列表。 | unique([1, 1, 2]) → [1, 2] |
| includes | 若列表包含指定值,返回 true,否则返回 false。 | includes(["a", "b", "c"], "b") → trueincludes([1, 2, 3], 4) → false |
| find | 返回列表中第一个满足条件的项。 | find(["a", "b", "c"], current == "b") → "b"find([1, 2, 3], current > 100) → Empty |
| findIndex | 返回列表中第一个满足条件的项的索引。 | findIndex(["a", "b", "c"], current == "b") → 1findIndex([1, 2, 3], current > 100) → -1 |
| filter | 返回列表中所有满足条件的项。 | filter([1, 2, 3], current > 1) → [2, 3]filter(["a", "b", "c"], current == "a") → ["a"] |
| some | 若列表中任意项满足条件,返回 true,否则返回 false。 | some([1, 2, 3], current == 2) → truesome(["a", "b", "c"], current.length > 2) → false |
| every | 若列表中所有项均满足条件,返回 true,否则返回 false。 | every([1, 2, 3], current > 0) → trueevery(["a", "b", "c"], current == "b") → false |
| map | 对列表中每一项执行表达式,返回结果列表。 | map([1, 2, 3], current + 1) → [2, 3, 4]map([1, 2, 3], current + index) → [1, 3, 5] |
| flat | 将嵌套列表展平为单层列表。 | flat([1, 2, 3]) → [1, 2, 3]flat([[1, 2], [3, 4]]) → [1, 2, 3, 4] |
| id | 返回页面 ID。若未提供页面,则返回当前公式所在页面的 ID。 | id()id(prop("Relation").first()) |
| equal | 若两值相等,返回 true,否则返回 false。 | equal(1, 1) → true"a" == "b" → false |
| unequal | 若两值不相等,返回 true,否则返回 false。 | unequal(1, 2) → true"a" != "a" → false |
| let | 将值赋给变量,并在表达式中使用该变量。 | let(person, "Alan", "Hello, " + person + "!") → "Hello, Alan!"let(radius, 4, round(pi() * radius ^ 2)) → 50 |
| lets | 将多个值赋给变量,并在表达式中使用这些变量。 | lets(a, "Hello", b, "world", a + " " + b) → "Hello world"lets(base, 3, height, 8, base * height / 2) → 12 |
更多 Notion 精彩内容关注微信公众号 NotionSo