Первая операция, которую нужно сделать, это разделить текст дня рождения на выделенные части:
RETURN split('05/07/1992', '/') AS parts
вернет массив
["05", "07", "1992"]
Вторая операция - создание датыobject:
WITH split('05/07/1992', '/') AS parts
RETURN date({day: parts[0], month: parts[1], year: parts[2]})
Проблема в том, что day, month and year
ожидают целочисленные значения, а не строки:
WITH [x IN split('05/07/1992', '/') | toInteger(x)] AS parts
RETURN date({day: parts[0], month: parts[1], year: parts[2]})
╒════════════════════════════════════════════════════════╕
│"date({day: parts[0], month: parts[1], year: parts[2]})"│
╞════════════════════════════════════════════════════════╡
│"1992-07-05" │
└────────────────────────────────────────────────────────┘
Теперь по второму вопросу, как упорядочить узлы по дню рождения и получить ихrank?
Ну, вместо этого вы можете упорядочить по метке времени, однако, как вы можете видеть в этой документации о типе даты, на нем нет epochMillis, поэтому вы можете вместо этого использовать datetime.
Полный поток:
// Create Persons
CREATE (a:Person{name:'Raf', birthDay:'05/07/1992'}),
(b:Person{name:'Mary', birthDay:'10/08/1991'}),
(c:Person{name:'Luke', birthDay:'11/01/1995'})
// Set datetime as dob property
MATCH (p:Person)
WITH p, [x IN split(p.birthDay, "/") | toInteger(x)] AS parts
SET p.dob = datetime({day: parts[0], month: parts[1], year: parts[2]})
// Return younger persons
MATCH (p:Person) RETURN p ORDER BY p.dob.epochMillis DESC