字符串函数
字符串函数仅对字符串表达式进行操作,如果用于其他任何值,将返回错误。此规则的例外是 toString()
,它也接受数字、布尔值和时间值(即 DATE
、ZONED TIME`
、LOCAL TIME
、ZONED DATETIME
、LOCAL DATETIME
或 DURATION
值)。
以 STRING
作为输入的所有函数都作用于 Unicode 字符,而不是标准 char[]
。例如,size()
函数应用于任何 Unicode 字符时将返回 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()
语法 |
|
||
描述 |
返回移除了开头空白字符的给定 |
||
参数 |
名称 |
类型 |
描述 |
|
|
将从中移除开头修剪字符的值。 |
|
|
|
将从给定字符串开头移除的字符。 |
|
返回 |
|
|
|
|
|
从 Neo4j 5.20 开始,可以指定 |
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()
语法 |
|
||
描述 |
返回一个 |
||
参数 |
名称 |
类型 |
描述 |
|
|
要修改的字符串。 |
|
|
|
要在原始字符串中替换的值。 |
|
|
|
要插入到原始字符串中的值。 |
|
返回 |
|
如果任何参数为 |
如果在 |
RETURN replace("hello", "l", "w")
replace("hello", "l", "w") |
---|
|
行数: 1 |
reverse()
语法 |
|
||
描述 |
返回一个 |
||
参数 |
名称 |
类型 |
描述 |
|
|
要反转的字符串或列表。 |
|
返回 |
|
|
另请参阅 列表函数 → |
RETURN reverse('palindrome')
reverse('palindrome') |
---|
|
行数: 1 |
right()
语法 |
|
||
描述 |
返回一个 |
||
参数 |
名称 |
类型 |
描述 |
|
|
其最左侧字符将被修剪的字符串值。 |
|
|
|
要返回的最右侧字符的长度。 |
|
返回 |
|
|
|
|
如果 |
如果 |
RETURN right('hello', 3)
right('hello', 3) |
---|
|
行数: 1 |
rtrim()
语法 |
|
||
描述 |
返回移除了尾随空白字符的给定 |
||
参数 |
名称 |
类型 |
描述 |
|
|
将从中移除开头和结尾修剪字符的值。 |
|
|
|
将从给定字符串的开头和结尾移除的字符。 |
|
返回 |
|
|
|
|
|
从 Neo4j 5.20 开始,可以指定 |
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(两端) |
|
|
|
将从给定字符串的开头和/或结尾移除的字符。 |
|
|
|
将从中移除所有开头和/或结尾修剪字符的值。 |
|
返回 |
|
|
|
|
|
从 Neo4j 5.20 开始,可以指定 |
RETURN trim(' hello '), trim(BOTH 'x' FROM 'xxxhelloxxx')
trim(' hello ') | trim(BOTH 'x' FROM 'xxxhelloxxx') |
---|---|
|
|
行数: 1 |