跳到主要内容

公式语法和函数

公式函数

Notion 的公式支持操作多种属性和函数。以下是完整列表 ➗

目录

  • 属性
  • 内置函数
  • 函数

想先了解公式基础?查看这篇入门指南:

Notion 的公式支持操作多种属性和函数。以下是完整列表!

属性

公式支持多种属性类型。对于不直接支持的类型,数据会自动转换为兼容格式(通常是文本)。

属性类型示例公式类型
Titleprop("Title")
prop("Title").length()
Text
Textprop("Text")
prop("Text").length()
Text
Selectprop("Priority") == "High"Text
Multi-Selectprop("Tags").length()
prop("Tags").includes("Finance")
Text
Checkboxprop("Checkbox")
not prop("Checkbox")
Boolean
Email, URL, Phone Number!empty(prop("Phone"))
!empty(prop("Email"))
link("Call", "tel:" + prop("Phone"))
Text
Unique IDprop("Task ID").split("-").first() ← Prefix
prop("Task ID").split("-").last() ← ID
Text
Created By, Edited Byprop("Created By").name()
prop("Created By").email()
Person
Personprop("Person")
prop("Person").at(0).name()
prop("Person").map(current.email())
Person
Date, Created Time, Last Edited Timeprop("Due Date") > now()
dateBetween(prop("Birthday"), now(), "days")
Date
Numberprop("Number") / 2
pi() * prop("Radius") ^ 2
Number
Relationprop("Tasks").length()
prop("Tasks").filter(current.prop("Status") !== "Done")
Page
Rollupprop("Purchases").length()
prop("Average cost") * 12
Number, date, or list of any type.
取决于 Rollup 配置。

内置函数是编程语言中预定义的符号和值,用于辅助计算。

内置项示例
Math operators: +, -, *, %2 * pi()
"hello" + "world"
Boolean values: true, falsetrue
false
Comparison operators: ==, >, >=, <, <=123 == 123true
"Notion" == "Motion"false
Logical operators: and, or, notand:
true and false
true && false
and(true, false)

or:
true or false
or(true, false)

not:
not true
!true
Ternary operator: ? :X ? Y : Z 等价于 if(X, Y, Z)

Notion 公式支持以下函数。

NameDescriptionExample
if条件为真时返回第一个值,否则返回第二个值。if(true, 1, 2)1
if(false, 1, 2)2
prop("Checked") == true ? "Complete" : "Incomplete"
ifs返回第一个为真条件对应的值。可替代多层嵌套 if()ifs(true, 1, true, 2, 3)1
ifs(false, 1, false, 2, 3)3
empty值为空时返回 true0""[] 均视为空。empty(0)true
empty([])true
length返回文本或列表的长度。length("hello")5
length([1, 2, 3])3
substring返回从起始索引(含)到结束索引(不含)的子字符串。结束索引可选。substring("Notion", 0, 3)"Not"
substring("Notion", 3)"ion"
contains若值包含搜索字符串,返回 truecontains("Notion", "ot")true
test若值匹配正则表达式,返回 true,否则返回 falsetest("Notion", "Not")true
test("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")Notion
style("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)15
5 + 1015
subtract返回两数之差。subtract(5, 10)-5
5 - 10-5
multiply返回两数之积。multiply(5, 10)50
5 * 1050
mod返回第一个数对第二个数取模的结果。mod(5, 10)5
5 % 105
pow返回底数的指数次幂。pow(5, 10)9765625
5 ^ 109765625
divide返回两数之商。divide(5, 10)0.5
5 / 100.5
min返回参数中的最小值。min(1, 2, 3)1
min([1, 2, 3])1
max返回参数中的最大值。max(1, 2, 3)3
max([1, 2, 3])3
sum返回所有参数之和。sum(1, 2, 3)6
sum([1, 2, 3], 4, 5)15
abs返回数的绝对值。abs(10)10
abs(-10)10
round返回四舍五入到最近整数的值。round(0.4)0
round(-0.6)-1
ceil返回大于或等于该数的最小整数。ceil(0.4)1
ceil(-0.6)0
floor返回小于或等于该数的最大整数。floor(0.4)0
floor(-0.6)-1
sqrt返回数的正平方根。sqrt(4)2
sqrt(7)2.6457513110645907
cbrt返回数的立方根。cbrt(9)2.080083823051904
cbrt(64)4
exp返回 e^x,其中 x 为参数,e 是自然对数的底(约 2.718…)。exp(1)2.718281828459045
exp(-1)0.36787944117144233
ln返回数的自然对数。ln(2.718281828459045)1
ln(10)2.302585092994046
log10返回数以 10 为底的对数。log10(10)1
log10(100000)5
log2返回数以 2 为底的对数。log2(4)2
log2(1024)10
sign数大于 0 返回 1,小于 0 返回 -1,等于 0 返回 0。sign(-10)-1
sign(10)1
pi返回圆周率(圆周长与直径之比)。pi()3.141592653589793
e返回自然对数的底。e()2.718281828459045
toNumber将文本解析为数字。toNumber("2")2
toNumber(now())1693443300000
toNumber(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 PM
dateAdd(now(), 2, "months")@October 30, 2023 5:55 PM
dateAdd(now(), 3, "years")@August 30, 2026 5:55 PM
dateSubtract从日期中减去时间。单位同 dateAdddateSubtract(now(), 1, "days")@August 29, 2023 5:55 PM
dateSubtract(now(), 2, "months")@June 30, 2023 5:55 PM
dateSubtract(now(), 3, "years")@August 30, 2020 5:55 PM
dateBetween返回两日期之差。单位同 dateAdddateBetween(now(), parseDate("2022-09-07"), "days")357
dateBetween(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, 2022
dateBetween(dateStart(prop("Date Range")), dateEnd(prop("Date Range")), "days")-365
dateEnd返回日期范围的结束日期。dateEnd(prop("Date range"))@September 7, 2023
dateBetween(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, 2022
parseDate("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返回人员的邮箱地址。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,否则返回 falseincludes(["a", "b", "c"], "b")true
includes([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")1
findIndex([1, 2, 3], current > 100)-1
filter返回列表中所有满足条件的项。filter([1, 2, 3], current > 1)[2, 3]
filter(["a", "b", "c"], current == "a")["a"]
some若列表中任意项满足条件,返回 true,否则返回 falsesome([1, 2, 3], current == 2)true
some(["a", "b", "c"], current.length > 2)false
every若列表中所有项均满足条件,返回 true,否则返回 falseevery([1, 2, 3], current > 0)true
every(["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,否则返回 falseequal(1, 1)true
"a" == "b"false
unequal若两值不相等,返回 true,否则返回 falseunequal(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