#neo4j #cypher #cql
#neo4j #шифр #cql
Вопрос:
Я работаю в базе данных neo4j.
у меня есть столбец csv-файла в формате ENTRY_DATE с датой строкового типа «08-apr-15». а формат текущей даты — «21-10-2016».Как изменить строковый тип Entry_date, похоже на формат текущей даты. но мне нужно сравнить текущую дату со столбцом entry_date, а затем вычислить разницу в месяце между двумя датами.
Ответ №1:
Вы можете проанализировать обе строки, используя строковые функции Cypher.
WITH {current_date} AS current_date
WITH split(current_date, '-') AS month_tuple
WITH month_tuple[1] AS c_month, month_tuple[2] AS c_year
WITH {jan: 1, feb: 2, ... dec: 12} AS month_map, c_month, c_year
LOAD CSV WITH HEADERS FROM "place" AS row
WITH row, row.ENTRY_DATE as e_date, c_month, c_year, month_map
WITH row, c_month, c_year, split(e_date, '-') AS e_tuple, month_map
WITH row, c_month, c_year, e_tuple[2] AS e_year, e_tuple[1] AS e_month_key, month_map
WITH row, (toInt(e_year) -toInt(c_year)) * 12 as year_diff, month_map[e_month_key] - toInt(c_month) AS month_diff
WITH row, year_diff month_diff AS months_later
Но InverseFalcon определенно прав в том, что это было бы намного лучше, если бы обрабатывалось через серверную часть. Очистите свой CSV перед импортом и передайте лучший источник текущей даты, и вы сможете вырезать большую часть этого запроса.
Ответ №2:
Neo4j вообще не поддерживает операции с датой и временем. Если ваш серверный фреймворк / язык имеет хорошую поддержку даты / времени, я бы рекомендовал выполнять это вычисление там, а не из самой базы данных.
Но если вы ищете чистое решение neo4j, библиотека процедур APOC имеет некоторую поддержку преобразования и форматирования, но если этого недостаточно, вы можете захотеть взглянуть на GraphAware neo4j timetree. Это должно дать вам некоторые графические операции для нахождения лет или месяцев между разными датами.