【问题标题】:SQL - Why pad spaces when comparing characters?SQL - 为什么在比较字符时填充空格?
【发布时间】:2012-09-17 03:17:45
【问题描述】:

似乎 DB2 和 Oracle 通过在右侧用空格填充较短的字符串来实现字符比较。但为什么呢?

如果数据库引擎修剪较大的字符值而不是用空格填充较短的字符值不是更好吗? IE。 如果我的查询是SELECT * from SOME_TABLE where CUSTOMER_NAME = 'Popeye ',那么数据库引擎最终会在SOME_TABLE 中的每一行添加空格,而它可以修剪此处传递的值,即'Popeye '

另外,只是想知道为什么 Oracle 和 DB2 只在右边添加空格?

【问题讨论】:

  • 我认为在右边添加空格是类型的属性,而不是RDBMS引擎的属性。如果您声明一列char(10),则会在较短的字符串中添加空格以使其长度为 10 个字符。如果您改为声明列 varchar2(10),则不会发生填充。

标签: sql oracle db2


【解决方案1】:

您混淆了不同类型的角色以及正在发生的事情。执行时:

SELECT * from SOME_TABLE where CUSTOMER_NAME = 'Popeye '

“SOME_TABLE 中的每一行”都没有添加空格。唯一的问题是结果的宽度。此宽度由 SOME_TABLE 中列的属性设置,而不是由 WHERE 子句中出现的内容设置。

如果您的 CUSTOMER_NAME 声明为 char(x) 值,则字符串必须具有该长度。比如说,它是char(10),你给它分配了“大力水手”。该值有六个字符,并且必须以某种方式填充到 10。 SQL 标准是在右侧填充,使值'Popeye '

如果你想要可变长度的字符串,那么使用 varchar 或 varchar2。

【讨论】:

    猜你喜欢
    • 2012-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-11
    • 2012-10-26
    • 2011-06-21
    • 2012-02-09
    相关资源
    最近更新 更多