【问题标题】:How does implicit casting work in Oracle NoSQL Database?Oracle NoSQL 数据库中的隐式转换如何工作?
【发布时间】:2021-05-11 14:15:00
【问题描述】:

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

有什么想法吗?

【问题讨论】:

    标签: nosql oracle-nosql


    【解决方案1】:

    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-04-27
      • 1970-01-01
      • 2020-11-07
      • 1970-01-01
      • 1970-01-01
      • 2012-01-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多