Неразборчивая дата: "NULL" с APOC.DATE.PARSE - PullRequest
0 голосов
/ 29 июня 2018

Я использую apoc для расчета разницы между двумя датами. Это работает, когда я предоставляю значение для N.ID в предложении MATCH. Но происходит сбой при удалении N.ID, потому что я пытаюсь обработать код для нескольких идентификаторов, а не для одного.

MATCH (N:PERSON)-[M:PLACED]-(K:ORDER) WHERE  K.ORDER_CODE="A23"  and N.ID=2511217
WITH N ,max(apoc.date.parse(SUBSTRING(M.ORDER_DATE,0,8),'d',"yyyymmdd")) AS initialTime,
apoc.date.parse(SUBSTRING(N.charge_DATE,0,8),'d',"yyyymmdd") AS finalTime
RETURN N.ID, finalTime - initialTime as difference ;

N.ID разница
2511217 4

Однако, когда N.ID удален, я получаю:

MATCH (N:PERSON)-[M:PLACED]-(K:ORDER) WHERE  K.ORDER_CODE="A23"    
WITH N ,max(apoc.date.parse(SUBSTRING(M.ORDER_DATE,0,8),'d',"yyyymmdd")) AS initialTime,
apoc.date.parse(SUBSTRING(N.charge_DATE,0,8),'d',"yyyymmdd") AS finalTime
RETURN N.ID, finalTime - initialTime as difference ;

Neo.ClientError.Procedure.ProcedureCallFailed: не удалось вызвать функцию apoc.date.parse: вызвано: java.text.ParseException: непроанализируемая дата: "NULL"

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Похоже, что несколько PERSON узлов размещают один и тот же ORDER, но в некоторых из них отсутствует свойство charge_DATE, необходимое для вашего запроса.

0 голосов
/ 29 июня 2018

Я думаю, это связано с функцией агрегирования max. Можете ли вы попробовать с этим запросом:

MATCH (N:PERSON)-[M:PLACED]-(K:ORDER) WHERE  K.ORDER_CODE="A23"
WITH 
    N ,
    apoc.date.parse(SUBSTRING(M.ORDER_DATE,0,8),'d',"yyyymmdd") AS initialTime,
    apoc.date.parse(SUBSTRING(N.charge_DATE,0,8),'d',"yyyymmdd") AS finalTime
WITH N, max(initialTime) AS initialTime, finalTime
RETURN N.ID, finalTime - initialTime as difference ;
...