2016-04-29 50 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