0

我试图理解隐式强制转换行为。我有一个名为 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

有任何想法吗 ?

4

1 回答 1

0

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

于 2021-05-11T06:15:00.913 回答