【问题标题】:What is the literal expression of NaN in Neo4j Cypher?Neo4j Cypher 中 NaN 的字面意思是什么?
【发布时间】:2016-08-25 15:29:32
【问题描述】:

如何在 Cypher 查询中将 NaN 表示为文字?

情况

我在数据库中有一个 NaN 值:

match (a) with max(a.CONCENTRATION) as m return m

将返回

m
---
NaN

Cypher reference in Neo4j 提到这可能是因为存储了特殊值:

特殊值 java.lang.Double.NaN 被认为大于所有其他数字。

我尝试了什么

但是,现在它在那里,我不知道如何在搜索中匹配它们,因为您收到以下错误

输入

match (a) where a.CONCENTRATION = NaN return a limit 10

错误

Variable `NaN` not defined (line 1, column 35 (offset: 34))

其他参考资料

Cypher reference in Neo4j 没有提到 NaN 文字,除非我错过了。

我用谷歌搜索了“Cypher NaN”,但我得到的最接近的结果是如何添加 inf/NaN,它没有直接解决 (How to add infinity, NaN, or null values to a double[] property on a node in Cypher/Neo4j)。

【问题讨论】:

标签: neo4j cypher


【解决方案1】:

没有办法指定文字,但这应该可以:

MATCH (a)
WHERE TOFLOAT(a.CONCENTRATION) <> a.CONCENTRATION
RETURN a
LIMIT 10;

TOFLOAT() 如果参数不能(根据需要)转换为数字,将返回 NULL。但是,即使参数可以转换,结果也不会等于参数,除非它以数字开头。

[更新]

@chaserino 不错的新答案促使我做更多的实验。

虽然 NaNInfinity-Infinity 仍然没有文字,但我确定 Cypher 可以在 neo4j 版本 3.4.0+ 中生成这些值(我没有测试早期版本)。然后,您可以使用这些值进行比较。

例如,此查询显示了如何生成这些值:

RETURN 0.0/0.0, 1.0/0.0, -1.0/0.0

结果如下:

╒═════════╤═════════╤══════════╕
│"0.0/0.0"│"1.0/0.0"│"-1.0/0.0"│
╞═════════╪═════════╪══════════╡
│NaN      │Infinity │-Infinity │
└─────────┴─────────┴──────────┘

注意:对于Infinity,您实际上可以使用任何正分子,对于-Infinity,您可以使用任何负分子。

【讨论】:

    【解决方案2】:

    这适用于 Neo4j 3.5:

    比赛(一) TOSTRING(a.CONCENTRATION) = 'NaN' 返回一个 限制 10;

    【讨论】:

    • 这个方法也适用于`toString(entity.value) = 'Infinity'`,这正是我所需要的。
    • 谢谢!也适用于 Neo4j +4.0。
    猜你喜欢
    • 2010-10-03
    • 2021-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    • 2023-01-19
    • 2013-05-28
    • 1970-01-01
    相关资源
    最近更新 更多