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

How does implicit casting work in Oracle NoSQL Database?

我正在尝试了解隐式转换行为。 我有一个名为 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 数据库中没有隐式转换 行为。 String 类型与 Long 类型不可比,因此在您的情况下谓词 ticketNo = 1762386738153 returns 始终为 false。一个字符串项与另一个字符串项具有可比性。字符串项也可与枚举项相媲美。

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

否则,

the reason for returning false for incomparable items, instead of raising an error, is to handle truly schemaless applications, where different table rows may contain very different data or differently shaped data. As a result, even the writer of the query may not know what kind of items an operand may return and an operand may indeed return different kinds of items from different rows.

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

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