Date Neo4J:如何将属性从字符串设置为日期?
我有以下具有此属性的节点:Date Neo4J:如何将属性从字符串设置为日期?,date,neo4j,set,cypher,Date,Neo4j,Set,Cypher,我有以下具有此属性的节点: MATCH (a:Person{name:'Raf', birthDay:'05/07/1992'}), (b:Person{name:'Mary', birthDay:'10/08/1991'}), (c:Person{name:'Luke', birthDay:'11/01/1995'}) 如何将生日从字符串格式设置为日期格式? 我怎样才能在考虑生日的情况下对节点进行排序并获得其排名?要做的第一个操作是将生日文本拆分为不同的部分:
MATCH (a:Person{name:'Raf', birthDay:'05/07/1992'}),
(b:Person{name:'Mary', birthDay:'10/08/1991'}),
(c:Person{name:'Luke', birthDay:'11/01/1995'})
如何将生日从字符串格式设置为日期格式?
我怎样才能在考虑生日的情况下对节点进行排序并获得其排名?要做的第一个操作是将生日文本拆分为不同的部分:
RETURN split('05/07/1992', '/') AS parts
将返回一个数组
["05", "07", "1992"]
第二个操作是创建日期对象:
WITH split('05/07/1992', '/') AS parts
RETURN date({day: parts[0], month: parts[1], year: parts[2]})
问题在于,日、月和年
期望的是整数值,而不是字符串:
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" │
└────────────────────────────────────────────────────────┘
现在来看第二个问题,如何按生日排序节点并确定其排名
好的,您可以使用时间戳来代替订单,但是正如您在这个关于日期类型的文档参考中所看到的,它没有epochmills,因此您可以使用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
要执行的第一个操作是将生日文本拆分为不同的部分:
RETURN split('05/07/1992', '/') AS parts
将返回一个数组
["05", "07", "1992"]
第二个操作是创建日期对象:
WITH split('05/07/1992', '/') AS parts
RETURN date({day: parts[0], month: parts[1], year: parts[2]})
问题在于,日、月和年
期望的是整数值,而不是字符串:
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" │
└────────────────────────────────────────────────────────┘
现在来看第二个问题,如何按生日排序节点并确定其排名
好的,您可以使用时间戳来代替订单,但是正如您在这个关于日期类型的文档参考中所看到的,它没有epochmills,因此您可以使用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
我有一个很大的数据库我如何解决这个问题:最大调用堆栈大小exceeded@raf我建议用查询和代码打开一个新的问题(以防从应用程序代码中执行此操作)我有一个很大的数据库如何解决这个问题:最大调用堆栈大小exceeded@raf我建议用查询和代码打开一个新问题(以防从应用程序代码开始)