Oracle NoSQL 数据库中的隐式转换是如何工作的?

问题描述

我试图理解隐式转换行为。 我有一个名为 ticketNo 的列,这是一个字符串,它是一个 pk。 在双方使用相同的数据类型,我返回一行

SELECT * FROM demo d  WHERE ticketNo = "1762386738153"

当我进行显式转换时,此查询返回同一行

SELECT * FROM demo d  WHERE cast (ticketNo as Long)= 1762386738153

现在,当我进行隐式转换时,此查询不返回任何行

SELECT * FROM demo d  WHERE ticketNo = 1762386738153

有什么想法吗?

解决方法

Oracle NoSQL 数据库中没有隐式转换行为。字符串类型无法与 Long 类型相比,因此谓词 ticketNo = 1762386738153 在您的情况下始终返回 false。一个字符串项目可与另一个字符串项目相比较。字符串项也可与枚举项相媲美。

在您的情况下,这是您的主键,为了获得最佳性能,不建议进行 CAST。在执行此查询之前验证类型。始终键入主键,不接受通配符或复杂类型

否则,

对于不可比的项目返回false的原因,而不是 引发错误,是处理真正无模式的应用程序,其中 不同的表行可能包含非常不同的数据或不同 形状的数据。结果,即使是查询的作者也可能不知道 操作数可能返回哪些类型的项目,操作数确实可能返回 从不同的行返回不同类型的项目。

您总是可以在需要时执行显式 CAST 操作,就像您所做的那样。

如果您有兴趣了解更多信息:https://docs.oracle.com/en/database/other-databases/nosql-database/20.3/sqlreferencefornosql/value-comparison-operators.html