преобразование значения в datetime при загрузке csv в cypher - PullRequest
0 голосов
/ 29 мая 2020

Я пытаюсь загрузить файл csv в neo4j, используя этот запрос:

:auto

USING PERIODIC COMMIT 
LOAD CSV WITH HEADERS FROM 'file:///test.csv' AS row
MERGE (news:newsID {newsID: row.id})
  ON CREATE SET 
  news.title = row.title, 
  news.creation_date = row.creation_date,
  news.content = row.content;

Я хочу преобразовать creation_date в datetime
Я могу сделать это, используя что-то вроде:

WITH apoc.date.parse("2019-3-8 12:10:11", "ms", "yyyy-MM-dd HH:mm:ss") AS ms
RETURN datetime({epochmillis: ms}) as cdate

Но я не могу использовать его в части набора LOAD CSV.
Как я могу преобразовать поле, используя apoc.date.parse и дату и время в LOAD CSV?

1 Ответ

1 голос
/ 29 мая 2020

Neo4j может автоматически анализировать широкий спектр строковых форматов на временные моменты (например, datetime). Вам просто нужно использовать поддерживаемый строковый формат.

Хотя ваша примерная строка («2019-3-8 12:10:11») не поддерживается, заменив пробел между датой и временем на « T "будет работать.

Например, попробуйте следующее:

RETURN datetime("2019-3-8T12:10:11");

Итак, при условии, что ваши значения свойств creation_date имеют поддерживаемый формат , это будет работать:

:auto
USING PERIODIC COMMIT 
LOAD CSV WITH HEADERS FROM 'file:///test.csv' AS row
MERGE (news:newsID {newsID: row.id})
  ON CREATE SET 
  news.title = row.title, 
  news.creation_date = datetime(row.creation_date),
  news.content = row.content;

Или, если вы хотите сохранить существующий файл CSV и предполагая, что его строки creation_date содержат только один пробел, вы можете сделать это:

:auto
USING PERIODIC COMMIT 
LOAD CSV WITH HEADERS FROM 'file:///test.csv' AS row
MERGE (news:newsID {newsID: row.id})
  ON CREATE SET 
  news.title = row.title, 
  news.creation_date = datetime(REPLACE(row.creation_date, ' ', 'T')),
  news.content = row.content;
...