字符串函数
字符串函数仅对字符串表达式执行操作,如果用于任何其他类型的值,将返回错误。该规则的一个例外是 toString(),它还接受数字、布尔值和时间值(即 DATE、ZONED TIME、LOCAL TIME、ZONED DATETIME、LOCAL DATETIME 或 DURATION 值)。
以 STRING 作为输入的函数全都基于Unicode 字符进行操作,而不是基于标准的 char[]。例如,对任何Unicode 字符应用 size() 函数都将返回 1,即使该字符无法容纳在一个 char 的 16 位空间中。
另请参阅字符串连接运算符。
btrim()
语法 |
|
||
描述 |
返回移除前导和尾随空白字符后的给定 |
||
参数 |
名称 |
类型 |
描述 |
|
|
将移除其前导和尾随修剪字符的值。 |
|
|
|
要从给定字符串的开头和结尾移除的字符。 |
|
返回 |
|
||
|
|
|
|
如果未指定 |
RETURN btrim(' hello '), btrim('xxyyhelloxyxy', 'xy')
| btrim(' hello') | btrim('xxyyhelloxyxy', 'xy') |
|---|---|
|
|
行:1 |
|
left()
语法 |
|
||
描述 |
返回一个包含给定 |
||
参数 |
名称 |
类型 |
描述 |
|
|
要对其最右侧字符进行修剪的字符串值。 |
|
|
|
要返回的最左侧字符的长度。 |
|
返回 |
|
||
|
|
|
如果 |
如果 |
RETURN left('hello', 3)
| left('hello', 3) |
|---|
|
行:1 |
ltrim()
语法 |
|
||
描述 |
返回移除前导空白字符后的给定 |
||
参数 |
名称 |
类型 |
描述 |
|
|
将移除其前导修剪字符的值。 |
|
|
|
要从给定字符串开头移除的字符。 |
|
返回 |
|
||
|
|
|
|
如果未指定 |
RETURN ltrim(' hello'), ltrim('xxyyhelloxyxy', 'xy')
| ltrim(' hello') | ltrim('xxyyhelloxyxy', 'xy') |
|---|---|
|
|
行:1 |
|
normalize()
语法 |
|
||
描述 |
规范化 |
||
参数 |
名称 |
类型 |
描述 |
|
|
要规范化的值。 |
|
|
|
指定任何规范形式(NFC、NFD、NFKC 或 NFKD)的关键字。 |
|
返回 |
|
||
|
Unicode 规范化是将同一字符串的不同表示形式转换为标准化形式的过程。有关更多信息,请参阅 Unicode 规范化形式的文档。 |
normalize() 函数对于将 STRING 值转换为可比较的形式非常有用。比较两个 STRING 值时,比较的是它们的 Unicode 码点。在 Unicode 中,外观相同的字符可能由两个或多个不同的码点表示。例如,字符 < 可以表示为 \uFE64 (﹤) 或 \u003C (<)。对于人眼来说,这些字符看起来是一样的。但是,如果进行比较,Cypher 将返回 false,因为 \uFE64 不等于 \u003C。使用 normalize() 函数,可以将码点 \uFE64 规范化为 \u003C,从而创建一个单一的码点表示,使它们能够成功进行比较。
|
RETURN normalize('\u212B') = '\u00C5' AS result
| 结果 |
|---|
|
行:1 |
要检查 STRING 是否已规范化,请使用 IS NORMALIZED 运算符。
normalize() 指定规范形式
主要有两种类型的规范化形式
-
规范等价:
NFC(默认)和NFD是规范等价的形式。这意味着代表相同抽象字符的码点将被规范化为相同的码点(并具有相同的外观和行为)。NFC形式将始终给出组合规范形式(如果可能,将组合代码替换为单个表示)。NFD形式给出分解形式(组合形式的对立面,如果可能,它将组合的码点转换为拆分形式)。 -
兼容性规范化:
NFKC和NFKD是兼容性规范化形式。所有规范等价的序列都是兼容的,但并非所有兼容的序列都是规范的。这意味着以NFC或NFD规范化的字符也应该在NFKC和NFKD中进行规范化。其他仅在外观上略有差异的字符应该是兼容等价的。
例如,带有尖音符和钩号符号的希腊字母 Upsilon ϓ 可以由 Unicode 码点表示:\u03D3。
-
NFC规范化:\u03D3带有尖音符和钩号符号的希腊大写字母 Upsilon (ϓ) -
NFD 规范化:\u03D2\u0301带有钩号符号的希腊大写字母 Upsilon + 组合尖音符 (ϓ) -
NFKC规范化:\u038E带有重音符的希腊大写字母 Upsilon (Ύ) -
NFKD规范化:\u03A5\u0301希腊大写字母 Upsilon + 组合尖音符 (Ύ)
在兼容性规范化形式(NFKC 和 NFKD)中,字符在视觉上是不同的,因为它不再包含钩号符号。
RETURN normalize('\uFE64', NFKC) = '\u003C' AS result
| 结果 |
|---|
|
行:1 |
replace()
语法 |
|
||
描述 |
返回一个 |
||
参数 |
名称 |
类型 |
描述 |
|
|
要修改的字符串。 |
|
|
|
在原始字符串中要替换的值。 |
|
|
|
要在原始字符串中插入的值。 |
|
|
|
在字符串中从左开始替换搜索值的最大次数。引入于 Neo4j 2025.06 |
|
返回 |
|
||
如果任何参数为 |
如果在 |
如果未定义 |
RETURN replace("hello", "l", "w")
| replace("hello", "l", "w") |
|---|
|
行:1 |
RETURN replace("hello", "l", "w", 1)
| replace("hello", "l", "w", 1) |
|---|
|
行:1 |
reverse()
语法 |
|
||
描述 |
返回一个 |
||
参数 |
名称 |
类型 |
描述 |
|
|
要反转的字符串或列表。 |
|
返回 |
|
||
|
另请参阅列表函数 → |
RETURN reverse('palindrome')
| reverse('palindrome') |
|---|
|
行:1 |
right()
语法 |
|
||
描述 |
返回一个包含给定 |
||
参数 |
名称 |
类型 |
描述 |
|
|
要对其最左侧字符进行修剪的字符串值。 |
|
|
|
要返回的最右侧字符的长度。 |
|
返回 |
|
||
|
|
|
如果 |
如果 |
RETURN right('hello', 3)
| right('hello', 3) |
|---|
|
行:1 |
rtrim()
语法 |
|
||
描述 |
返回移除尾随空白字符后的给定 |
||
参数 |
名称 |
类型 |
描述 |
|
|
将移除其前导和尾随修剪字符的值。 |
|
|
|
要从给定字符串的开头和结尾移除的字符。 |
|
返回 |
|
||
|
|
|
|
如果未指定 |
RETURN rtrim('hello '), rtrim('xxyyhelloxyxy', 'xy')
| rtrim('hello ') | rtrim('xxyyhelloxyxy', 'xy') |
|---|---|
|
|
行:1 |
|
split()
语法 |
|
||
描述 |
返回通过在给定的分隔符匹配处拆分给定 |
||
参数 |
名称 |
类型 |
描述 |
|
|
要拆分的字符串。 |
|
|
|
用于拆分原始字符串的字符串。 |
|
返回 |
|
||
|
|
RETURN split('one,two', ',')
| split('one,two', ',') |
|---|
|
行:1 |
substring()
语法 |
|
||
描述 |
返回从给定 |
||
参数 |
名称 |
类型 |
描述 |
|
|
要缩短的字符串。 |
|
|
|
新字符串的起始位置。 |
|
|
|
新字符串的长度。 |
|
返回 |
|
||
|
如果省略 |
如果 |
如果 |
如果 |
如果 |
RETURN substring('hello', 1, 3), substring('hello', 2)
| substring('hello', 1, 3) | substring('hello', 2) |
|---|---|
|
|
行:1 |
|
toLower()
语法 |
|
||
描述 |
返回转换为小写的给定 |
||
参数 |
名称 |
类型 |
描述 |
|
|
要转换为小写的字符串。 |
|
返回 |
|
||
|
RETURN toLower('HELLO')
| toLower('HELLO') |
|---|
|
行:1 |
toString()
语法 |
|
||
描述 |
将 |
||
参数 |
名称 |
类型 |
描述 |
|
|
要转换为字符串的值。 |
|
返回 |
|
||
|
如果 |
如果提供的表达式不是 |
RETURN
toString(11.5),
toString('already a string'),
toString(true),
toString(date({year: 1984, month: 10, day: 11})) AS dateString,
toString(datetime({year: 1984, month: 10, day: 11, hour: 12, minute: 31, second: 14, millisecond: 341, timezone: 'Europe/Stockholm'})) AS datetimeString,
toString(duration({minutes: 12, seconds: -60})) AS durationString
| toString(11.5) | toString('already a string') | toString(true) | dateString | datetimeString | durationString |
|---|---|---|---|---|---|
|
|
|
|
|
|
行:1 |
|||||
toStringOrNull()
语法 |
|
||
描述 |
将 |
||
参数 |
名称 |
类型 |
描述 |
|
|
要转换为字符串或 null 的值。 |
|
返回 |
|
||
|
如果 |
RETURN toStringOrNull(11.5),
toStringOrNull('already a string'),
toStringOrNull(true),
toStringOrNull(date({year: 1984, month: 10, day: 11})) AS dateString,
toStringOrNull(datetime({year: 1984, month: 10, day: 11, hour: 12, minute: 31, second: 14, millisecond: 341, timezone: 'Europe/Stockholm'})) AS datetimeString,
toStringOrNull(duration({minutes: 12, seconds: -60})) AS durationString,
toStringOrNull(['A', 'B', 'C']) AS list
| toStringOrNull(11.5) | toStringOrNull('already a string') | toStringOrNull(true) | dateString | datetimeString | durationString | list |
|---|---|---|---|---|---|---|
|
|
|
|
|
|
|
行:1 |
||||||
toUpper()
语法 |
|
||
描述 |
返回转换为大写的给定 |
||
参数 |
名称 |
类型 |
描述 |
|
|
要转换为大写的字符串。 |
|
返回 |
|
||
|
RETURN toUpper('hello')
| toUpper('hello') |
|---|
|
行:1 |
trim()
语法 |
|
||
描述 |
返回移除前导和/或尾随 |
||
参数 |
名称 |
类型 |
描述 |
|
|
要修剪的字符串部分;LEADING(前导)、TRAILING(尾随)、BOTH(两者) |
|
|
|
要从给定字符串的开头和/或结尾移除的字符。 |
|
|
|
将移除所有前导和/或尾随修剪字符的值。 |
|
返回 |
|
||
|
|
|
|
如果未指定 |
RETURN trim(' hello '), trim(BOTH 'x' FROM 'xxxhelloxxx')
| trim(' hello ') | trim(BOTH 'x' FROM 'xxxhelloxxx') |
|---|---|
|
|
行:1 |
|