neo4j cypher在Where子句中左边填充字符串

时间:2016-04-29 08:28:57

标签: neo4j cypher

我的节点中有一个String属性,其中String的长度没有修复。 现在我必须通过此属性搜索正确的节点,但我从另一个系统获得固定长度值。例如,我的节点具有值' 0123'但我得到了信息' 000123'寻找。

我需要一个像Zeros左边填充的函数,这个在Where子句中,如

  

MATCH(a:LABEL),其中leftPad(a.property,6,' 0')=' 000123'回来一个   限制1

这样的事情有可能带来良好的表现吗?

2 个答案:

答案 0 :(得分:5)

你可以这样做:

MATCH (a:LABEL)
WHERE SUBSTRING('00000', 0, SIZE(a.property)) + a.property = '000123'
RETURN a
LIMIT 1;

或者,如果所有字符都是数字,那么您可以这样做:

MATCH (a:LABEL)
WHERE TOINT(a.property) = TOINT('000123')
RETURN a
LIMIT 1;

但是,如果您可以将property值作为整数存储在第一位,并将其与整数进行比较,那将会更好,这将是最快的。根据您的具体情况,这可能很容易做到。

MATCH (a:LABEL)
WHERE a.property = 000123
RETURN a
LIMIT 1;

答案 1 :(得分:0)

使用reduce尝试:

MATCH (a:LABEL) 
WHERE REDUCE(lp='', n in RANGE(0,5-size(a.name)) | lp+'0')+a. a.property = '000123'
RETURN a

或使用regular expression尝试:

MATCH (a:LABEL)
WHERE a.property =~ '(0){0,3}123'
RETURN a