2016-04-29 51 views
0

我有一个字符串属性在我的节点,其中的字符串的长度不固定。 现在我必须通过这个属性来搜索正确的节点,但是我从另一个系统得到了一个固定长度的值。例如,我的节点的值为'0123',但我得到信息'000123'进行搜索。neo4j密码左填充字符串在哪里条款

我需要在像用零左填充的函数,并且该where子句等

MATCH(一个:LABEL)其中leftPad(a.property,如图6所示, '0')= '000123' 返回a LIMIT 1

这是类似的事情吗?

回答

4

你可以这样做:

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 = 00
RETURN a 
LIMIT 1; 
+0

谢谢,第一个解决方案适用于我。 =) –

+0

'substring(“00000”,length(s))'看起来比'substring(“00000”,0,5-length(s))'更有效率:) –

+0

好点。我已经更新了我的答案。 – cybersam

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