如何在Neo4j中使用Cypher对逗号分隔数值做大小比较查询
问题原因
你当前的写法执行的是字符串字典序比较,而非数值大小比较,千位分隔符的存在也会导致字符串无法直接转换为合法数值参与计算,所以无法得到正确结果。
适配不同场景的修改方案
- 场景1:
n.value字段存储的是带千位逗号的字符串类型(比如存储值为"12,196"格式)
先通过replace()移除字段值中的逗号,再转换为整数和目标数值比较即可,查询语句如下:
MATCH (n:Field) WHERE n.name = "square:" AND toInteger(replace(n.value, ",", "")) > 12196 RETURN n
如果存在部分节点的value值不符合格式、转换会报错的情况,可以增加空值判断过滤非法数据:
MATCH (n:Field) WHERE n.name = "square:" AND toIntegerOrNull(replace(n.value, ",", "")) IS NOT NULL AND toInteger(replace(n.value, ",", "")) > 12196 RETURN n
- 场景2:
n.value字段本身就是数值类型,只是你输入的对比值额外带了千位逗号
直接去掉对比值的引号和千位逗号即可,查询语句如下:
MATCH (n:Field) WHERE n.name = "square:" AND n.value > 12196 RETURN n
内容的提问来源于stack exchange,提问作者nik12
相关产品推荐
相关产品推荐

