neo4j 如何匹配在间隔中定义的起始字母的名称

xxls0lw8  于 2022-11-05  发布在  其他
关注(0)|答案(1)|浏览(122)

我有一个电影数据集,其中包含导演和女演员的名字。我想捕捉所有女演员的名字,以字母B到J之间的开头。除了使用'OR' MATCH (a:ACTOR)-[:PLAYED]-> (:MOVIE) WHERE a.Name STRATS WITH 'B' OR a.Name STARTS WITH 'C' ...,有没有更复杂的方法来做到这一点?
我非常感谢您对此事的任何建议。

mzillmmw

mzillmmw1#

您可以使用Cypher正则表达式

MATCH (a:ACTOR)-[:PLAYED]->(:MOVIE)
WHERE  toLower(a.name) =~ '[b-j].*'
RETURN a

检查所有以b和j之间的字符开头的名称。结尾的通配符匹配所有后缀。
您也可以使用IN,但在这种情况下,您必须提供要匹配的整个字符列表:

MATCH (a:ACTOR)-[:PLAYED]->(:MOVIE)
WHERE  left(toLower(n.name),1) in ['b','c','d','e','f','g','h','i','j']
RETURN n.name

我在这两种情况下都使用了toLower,以确保匹配不区分大小写。
在第二种方法中,我使用left函数来获取名称的第一个字符,并检查它是否在给定的列表中。
存在Starts With运算符。但它不允许与列表(IN)进行匹配。

相关问题