字符串函数
字符串函数仅对字符串表达式进行操作,如果用于任何其他值,则会返回错误。此规则的例外是 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()
语法 |
|
||
描述 |
返回给定的 |
||
参数 |
名称 |
类型 |
描述 |
|
|
将从中删除前导修剪字符的值。 |
|
|
|
要从给定字符串的开头删除的字符。 |
|
返回值 |
|
|
|
|
|
从 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()
语法 |
|
||
描述 |
返回一个 |
||
参数 |
名称 |
类型 |
描述 |
|
|
要反转的字符串或列表。 |
|
返回值 |
|
|
另请参阅 列表函数 → 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 |