【问题标题】:Intersystems Caché SQL. Different behaviour trailing withespaces vs leading withespaces跨系统缓存 SQL。尾随空格与前导空格的不同行为
【发布时间】:2015-10-21 17:46:57
【问题描述】:

鉴于:

  • 具有“ID”和“描述”列的表 tA
  • “描述”是一个字符串列。
  • 表格内容为:

    ID ||说明
    1 || “字符串 1”
    2 || “字符串2”
    3 || “字符串3”

如果我执行以下 SQL 查询:
"SELECT ID FROM tA WHERE Description = 'String2'" 它返回 2(如预期)

但是:

如果我执行以下 SQL 查询:
"SELECT ID FROM tA WHERE Description = 'String2'"(尾随空格)它也返回 2! (因为它是一个精确的比较,它应该返回 NONE)

如果我执行以下 SQL 查询:
"SELECT ID FROM tA WHERE Description = 'String2'"(以空格开头)它返回 NONE(如预期的那样)

你知道造成这种行为差异的原因是什么吗?

提前致谢。

【问题讨论】:

  • 我不能代表缓存,但这是 SQL92 标准规定的数据库中的常见行为:在比较之前填充字符串,以便它们具有相同的长度 - 通常这意味着尾随空白被忽略,而前导空白则不被忽略。 (大概是为了方便使用固定宽度的字符类型)

标签: sql intersystems-cache trailing intersystems objectscript


【解决方案1】:

您需要在列名周围使用“%EXACT”。这应该不返回任何记录:“SELECT ID FROM tA WHERE %EXACT(Description) = 'String2'”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-11
    • 1970-01-01
    • 2019-12-16
    • 1970-01-01
    • 2012-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多