函数
Cypher中的函数如果输入参数为null,则返回null。
以字符串作为输入的函数都对Unicode字符进行操作,而不是对标准字符进行操作。例如,size()函数应用于任何Unicode字符将返回1,即使该字符不适合一个字符的16位。
可以通过 SHOW FUNCTIONS 查看函数定义。
函数签名中参数格式:eg:
all(variable :: VARIABLE //:: VARIABLE,说明是个变量,可用于后面的 WHERE 部分IN
list :: LIST OF ANY? //list,是个LIST泛型。
WHERE predicate :: ANY? // predicate,是任意的断言
)
:: (BOOLEAN?) //函数返回值类型为BOOLEAN
断言函数
Function Signature Description all()all(variable :: VARIABLE IN list :: LIST OF ANY? WHERE predicate :: ANY?) :: (BOOLEAN?)Returns true if the predicate holds for all elements in the given list. any()any(variable :: VARIABLE IN list :: LIST OF ANY? WHERE predicate :: ANY?) :: (BOOLEAN?)Returns true if the predicate holds for at least one element in the given list. exists()exists(input :: ANY?) :: (BOOLEAN?)Returns true if a match for the pattern exists in the graph. isEmpty()isEmpty(input :: LIST? OF ANY?) :: (BOOLEAN?)Checks whether a list is empty. isEmpty()isEmpty(input :: MAP?) :: (BOOLEAN?)Checks whether a map is empty. isEmpty()isEmpty(input :: STRING?) :: (BOOLEAN?)Checks whether a string is empty. none()none(variable :: VARIABLE IN list :: LIST OF ANY? WHERE predicate :: ANY?) :: (BOOLEAN?)Returns true if the predicate holds for no element in the given list. single()single(variable :: VARIABLE IN list :: LIST OF ANY? WHERE predicate :: ANY?) :: (BOOLEAN?)Returns true if the predicate holds for exactly one of the elements in the given list.
标量函数
Function Signature Description coalesce()coalesce(input :: ANY?) :: (ANY?)返回第一个非null值。 endNode()endNode(input :: RELATIONSHIP?) :: (NODE?)Returns the end node of a relationship. head()head(list :: LIST? OF ANY?) :: (ANY?)Returns the first element in a list. id()id(input :: NODE?) :: (INTEGER?)Deprecated Returns the id of a node. Replaced by elementId() id(input :: RELATIONSHIP?) :: (INTEGER?)Deprecated Returns the id of a relationship. Replaced by elementId(). last()last(list :: LIST? OF ANY?) :: (ANY?)length()length(input :: PATH?) :: (INTEGER?)Returns the length of a path. properties()properties(input :: MAP?) :: (MAP?)返回一个对象的所有属性,作为一个map properties(input :: NODE?) :: (MAP?)返回一个节点的所有属性,作为一个map properties(input :: RELATIONSHIP?) :: (MAP?)返回一个关系的所有属性,作为一个map randomUUID()randomUUID() :: (STRING?)size()size(input :: LIST? OF ANY?) :: (INTEGER?)Returns the number of items in a list. size(input :: STRING?) :: (INTEGER?)Returns the number of Unicode characters in a string. startNode()startNode(input :: RELATIONSHIP?) :: (NODE?)toBoolean()toBoolean(input :: STRING?) :: (BOOLEAN?)toBoolean(input :: BOOLEAN?) :: (BOOLEAN?)toBoolean(input :: INTEGER?) :: (BOOLEAN?)toBooleanOrNull()toBooleanOrNull(input :: ANY?) :: (BOOLEAN?)转换为boolean,不能转换返回null。 toFloat()toFloat(input :: NUMBER?) :: (FLOAT?)toFloat(input :: STRING?) :: (FLOAT?)toFloatOrNull()toFloatOrNull(input :: ANY?) :: (FLOAT?)转换为小数,不能转换返回null。 toInteger()toInteger(input :: NUMBER?) :: (INTEGER?)toInteger(input :: BOOLEAN?) :: (INTEGER?)toInteger(input :: STRING?) :: (INTEGER?)toIntegerOrNull()toIntegerOrNull(input :: ANY?) :: (INTEGER?)转换为整形,不能转换返回null。 type()type(input :: RELATIONSHIP?) :: (STRING?)Returns the string representation of the relationship type.
示例
CREATE (p:Person {name: 'Stefan', city: 'Berlin'})
RETURN properties(p)
//OUT PUT:
//: {"city":"Berlin","name":"Stefan"}
聚合函数
Function Signature Description avg()avg(input :: DURATION?) :: (DURATION?)avg(input :: FLOAT?) :: (FLOAT?)avg(input :: INTEGER?) :: (INTEGER?)collect()collect(input :: ANY?) :: (LIST? OF ANY?)收集数据作为一个LIST。 count()count(input :: ANY?) :: (INTEGER?)max()max(input :: ANY?) :: (ANY?)min()min(input :: ANY?) :: (ANY?)percentileCont()percentileCont(input :: FLOAT?, percentile :: FLOAT?) :: (FLOAT?)percentileDisc()percentileDisc(input :: FLOAT?, percentile :: FLOAT?) :: (FLOAT?)`percentileDisc(input :: INTEGER?, percentile :: FLOAT?) :: (INTEGER?) stdev()stdev(input :: FLOAT?) :: (FLOAT?)stdevp()stdevp(input :: FLOAT?) :: (FLOAT?)sum()sum(input :: DURATION?) :: (DURATION?)`sum(input :: FLOAT?) :: (FLOAT?) `sum(input :: INTEGER?) :: (INTEGER?)
集合函数
Function Signature Description keys()keys(input :: MAP?) :: (LIST? OF STRING?)返回MAP的所有KEY LIST keys(input :: NODE?) :: (LIST? OF STRING?)返回节点的所有属性 LIST keys(input :: RELATIONSHIP?) :: (LIST? OF STRING?)返回关系的所有属性 LIST labels()labels(input :: NODE?) :: (LIST? OF STRING?)Returns a list containing the string representations for all the labels of a node. nodes()nodes(input :: PATH?) :: (LIST? OF NODE?)Returns a list containing all the nodes in a path. range()range(start :: INTEGER?, end :: INTEGER?) :: (LIST? OF INTEGER?)Returns a list comprising all integer values within a specified range. range(start :: INTEGER?, end :: INTEGER?, step :: INTEGER?) :: (LIST? OF INTEGER?)Returns a list comprising all integer values within a specified range created with step length. reduce()`reduce(accumulator :: VARIABLE = initial :: ANY?, variable :: VARIABLE IN list :: LIST OF ANY? expression :: ANY) :: (ANY?)` relationships()relationships(input :: PATH?) :: (LIST? OF RELATIONSHIP?)Returns a list containing all the relationships in a path. reverse()reverse(input :: LIST? OF ANY?) :: (LIST? OF ANY?)Returns a list in which the order of all elements in the original list have been reversed. tail()tail(input :: LIST? OF ANY?) :: (LIST? OF ANY?)Returns all but the first element in a list. toBooleanList()toBooleanList(input :: LIST? OF ANY?) :: (LIST? OF BOOLEAN?)toFloatList()toFloatList(input :: LIST? OF ANY?) :: (LIST? OF FLOAT?)toIntegerList()toIntegerList(input :: LIST? OF ANY?) :: (LIST? OF INTEGER?)toStringList()toStringList(input :: LIST? OF ANY?) :: (LIST? OF STRING?)
示例
toBooleanList():
RETURN toBooleanList(null) as noList,
toBooleanList([null, null]) as nullsInList,
toBooleanList(['a string', true, 'false', null, ['A','B']]) as mixedList
noList nullsInList mixedList <null>[<null>,<null>][<null>,true,false,<null>,<null>]
总结:
参数不是个LIST,报错 LIST 中的null,不转换,保留 LIST中的不可转换元素,结果为null。 BOOLEAN类型的元素,保留原始值
toFloatList,toIntegerList,toStringList 与 toBooleanList 规则类似。
数值函数
Function Signature Description abs()abs(input :: FLOAT?) :: (FLOAT?)abs(input :: INTEGER?) :: (INTEGER?)ceil()ceil(input :: FLOAT?) :: (FLOAT?)floor()floor(input :: FLOAT?) :: (FLOAT?)isNaN()isNaN(input :: FLOAT?) :: (BOOLEAN?)Returns true if the floating point number is NaN. isNaN(input :: INTEGER?) :: (BOOLEAN?)rand()rand() :: (FLOAT?)round()round(input :: FLOAT?) :: (FLOAT?)round(value :: FLOAT?, precision :: NUMBER?) :: (FLOAT?)round(value :: FLOAT?, precision :: NUMBER?, mode :: STRING?) :: (FLOAT?)sign()sign(input :: FLOAT?) :: (INTEGER?)sign(input :: INTEGER?) :: (INTEGER?)
对数函数
Function Signature Description e()e() :: (FLOAT?)返回e。 exp()exp(input :: FLOAT?) :: (FLOAT?)返回e^n。 log()log(input :: FLOAT?) :: (FLOAT?)返回自然对数,以e为底 log10()log10(input :: FLOAT?) :: (FLOAT?)返回以10位底的对数 sqrt()sqrt(input :: FLOAT?) :: (FLOAT?)平方差
三角函数
Function Signature Description acos()acos(input :: FLOAT?) :: (FLOAT?)asin()`asin(input :: FLOAT?) :: (FLOAT?) atan()atan(input :: FLOAT?) :: (FLOAT?)atan2()atan2(y :: FLOAT?, x :: FLOAT?) :: (FLOAT?)cos()cos(input :: FLOAT?) :: (FLOAT?)cot()cot(input :: FLOAT?) :: (FLOAT?)degrees()degrees(input :: FLOAT?) :: (FLOAT?)将弧度转换为角度 haversin()haversin(input :: FLOAT?) :: (FLOAT?)半正矢计算 pi()pi() :: (FLOAT?)radians()radians(input :: FLOAT?) :: (FLOAT?)将角度转换为弧度 sin()sin(input :: FLOAT?) :: (FLOAT?)tan()tan(input :: FLOAT?) :: (FLOAT?)
字符串函数
Function Signature Description left()left(original :: STRING?, length :: INTEGER?) :: (STRING?)ltrim()ltrim(input :: STRING?) :: (STRING?)replace()replace(original :: STRING?, search :: STRING?, replace :: STRING?) :: (STRING?)reverse()reverse(input :: STRING?) :: (STRING?)right()`right(original :: STRING?, length :: INTEGER?) :: (STRING?) rtrim()rtrim(input :: STRING?) :: (STRING?)split()split(original :: STRING?, splitDelimiter :: STRING?) :: (LIST? OF STRING?)split(original :: STRING?, splitDelimiters :: LIST? OF STRING?) :: (LIST? OF STRING?)substring()substring(original :: STRING?, start :: INTEGER?) :: (STRING?)从0开始 substring(original :: STRING?, start :: INTEGER?, length :: INTEGER?) :: (STRING?)toLower()toLower(input :: STRING?) :: (STRING?)toString()toString(input :: ANY?) :: (STRING?)toStringOrNull()toStringOrNull(input :: ANY?) :: (STRING?)toUpper()toUpper(input :: STRING?) :: (STRING?)trim()trim(input :: STRING?) :: (STRING?)
时间函数
Function Signature Description date()date(input = DEFAULT_TEMPORAL_ARGUMENT :: ANY?) :: (DATE?)创建DATE date.realtime()date.realtime(timezone = DEFAULT_TEMPORAL_ARGUMENT :: ANY?) :: (DATE?)使用 realtime clock 创建当前DATE date.statement()date.statement(timezone = DEFAULT_TEMPORAL_ARGUMENT :: ANY?) :: (DATE?)使用 statement clock 创建当前DATE date.transaction()date.transaction(timezone = DEFAULT_TEMPORAL_ARGUMENT :: ANY?) :: (DATE?)使用 transaction clock 创建当前DATE date.truncate()date.truncate(unit :: STRING?, input = DEFAULT_TEMPORAL_ARGUMENT :: ANY?, fields = null :: MAP?) :: (DATE?)截断DATE datetime()datetime(input = DEFAULT_TEMPORAL_ARGUMENT :: ANY?) :: (DATETIME?)datetime.fromepoch()datetime.fromepoch(seconds :: NUMBER?, nanoseconds :: NUMBER?) :: (DATETIME?)datetime.fromepochmillis()datetime.fromepochmillis(milliseconds :: NUMBER?) :: (DATETIME?)datetime.realtime()datetime.realtime(timezone = DEFAULT_TEMPORAL_ARGUMENT :: ANY?) :: (DATETIME?)datetime.statement()datetime.statement(timezone = DEFAULT_TEMPORAL_ARGUMENT :: ANY?) :: (DATETIME?)datetime.transaction()datetime.transaction(timezone = DEFAULT_TEMPORAL_ARGUMENT :: ANY?) :: (DATETIME?)datetime.truncate()datetime.truncate(unit :: STRING?, input = DEFAULT_TEMPORAL_ARGUMENT :: ANY?, fields = null :: MAP?) :: (DATETIME?)localdatetime()localdatetime(input = DEFAULT_TEMPORAL_ARGUMENT :: ANY?) :: (LOCALDATETIME?)localdatetime.realtime()localdatetime.realtime(timezone = DEFAULT_TEMPORAL_ARGUMENT :: ANY?) :: (LOCALDATETIME?)localdatetime.statement()localdatetime.statement(timezone = DEFAULT_TEMPORAL_ARGUMENT :: ANY?) :: (LOCALDATETIME?)localdatetime.transaction()localdatetime.transaction(timezone = DEFAULT_TEMPORAL_ARGUMENT :: ANY?) :: (LOCALDATETIME?)localdatetime.truncate()localdatetime.truncate(unit :: STRING?, input = DEFAULT_TEMPORAL_ARGUMENT :: ANY?, fields = null :: MAP?) :: (LOCALDATETIME?)localtime()localtime(input = DEFAULT_TEMPORAL_ARGUMENT :: ANY?) :: (LOCALTIME?)localtime.realtime()localtime.realtime(timezone = DEFAULT_TEMPORAL_ARGUMENT :: ANY?) :: (LOCALTIME?)localtime.statement()localtime.statement(timezone = DEFAULT_TEMPORAL_ARGUMENT :: ANY?) :: (LOCALTIME?)localtime.transaction()localtime.transaction(timezone = DEFAULT_TEMPORAL_ARGUMENT :: ANY?) :: (LOCALTIME?)localtime.truncate()localtime.truncate(unit :: STRING?, input = DEFAULT_TEMPORAL_ARGUMENT :: ANY?, fields = null :: MAP?) :: (LOCALTIME?)time()time(input = DEFAULT_TEMPORAL_ARGUMENT :: ANY?) :: (TIME?)time.realtime()time.realtime(timezone = DEFAULT_TEMPORAL_ARGUMENT :: ANY?) :: (TIME?)time.statement()time.statement(timezone = DEFAULT_TEMPORAL_ARGUMENT :: ANY?) :: (TIME?)time.transaction()time.transaction(timezone = DEFAULT_TEMPORAL_ARGUMENT :: ANY?) :: (TIME?)time.truncate()time.truncate(unit :: STRING?, input = DEFAULT_TEMPORAL_ARGUMENT :: ANY?, fields = null :: MAP?) :: (TIME?)
时钟控制
transaction: 同一个事务,时间返回相同值。statement: 同一个语句的同一次调用,时间返回相同值。realtime: 系统时间。
截断单位
millennium:千年century:世纪decade:十年year:weekYear:quarter:month:week:day:hour:minute:second:millisecond: 毫秒microsecond: 微秒
示例
date([{timezone}])
RETURN date() AS currentDate
RETURN date({timezone: 'America/Los Angeles'}) AS currentDateInLAdate({year [, month, day]})
UNWIND [
date({year: 1984, month: 10, day: 11}),
date({year: 1984, month: 10}),
date({year: 1984})
] AS theDate
RETURN theDatedate({year [, week, dayOfWeek]})
UNWIND [
date({year: 1984, week: 10, dayOfWeek: 3}),
date({year: 1984, week: 10}),
date({year: 1984})
] AS theDate
RETURN theDate
所有时间函数,都支持通过一个Map对象 构造时间实例。
duration函数
Function Signature Description duration()duration(input :: ANY?) :: (DURATION?)duration.between()duration.between(from :: ANY?, to :: ANY?) :: (DURATION?)计算2个时间差 duration.inDays()duration.inDays(from :: ANY?, to :: ANY?) :: (DURATION?)duration.inMonths()duration.inMonths(from :: ANY?, to :: ANY?) :: (DURATION?)duration.inSeconds()duration.inSeconds(from :: ANY?, to :: ANY?) :: (DURATION?)
示例
duration([ {years, quarters, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds} ])duration(temporalAmount) // temporalAmount STRING类型
duration标准字符串格式:P[nY][nM][nW][nD][T[nH][nM][nS]],具体见:https://neo4j.com/docs/cypher-manual/current/values-and-types/temporal/#cypher-temporal-specifying-durations
duration.between(instant1, instant2)
字段
yearsquartersmonthsweeksdayshoursminutessecondsmillisecondsmicrosecondsnanoseconds
空间函数
Function Signature Description point.distance()`point.distance(from :: POINT?, to :: POINT?) :: (FLOAT?) point() - Cartesian 2Dpoint(input :: MAP?) :: (POINT?)point() - Cartesian 3Dpoint(input :: MAP?) :: (POINT?)point() - WGS 84 2D`point(input :: MAP?) :: (POINT?) point() - WGS 84 3D`point(input :: MAP?) :: (POINT?) point.withinBBox()point.withinBBox(point :: POINT?, lowerLeft :: POINT?, upperRight :: POINT?) :: (BOOLEAN?)
加载 CSV 函数
Function Signature Description file()file() :: (STRING?)返回文件路径 linenumber()linenumber() :: (INTEGER?)返回行数
Graph functions
Function Signature Description graph.names()graph.names() :: (LIST? OF STRING?)graph.propertiesByName()graph.propertiesByName(name :: STRING?) :: (MAP?)graph.byName()USE graph.byName(name :: STRING?)
用户自定义函数
Type Description Usage Developing Scalar For each row the function takes parameters and returns a result. Using UDF Extending Neo4j (UDF) Aggregating Consumes many rows and produces an aggregated result. Using aggregating UDF Extending Neo4j (Aggregating UDF)
附录
参考
https://neo4j.com/docs/cypher-manual/current/functions/