1

我有一个查询,它提取我们数据库中所有姓氏的计数,并按姓氏长度对计数进行排序。这是一个最大长度为 120 的 VARCHAR 字段。

一些字符长度短得多的结果 - 5、6、7 等字符 - 显示为 120。使用 RTRIM 似乎得到了正确的结果,但我很困惑为什么当我没有 RTRIM 时为什么大多数值计算正确,但有些不正确。虽然我知道我使用 RTRIM 得到了正确的结果,但我只是想了解为什么有些情况下没有它就不能正确地实现它。

SELECT LENGTH(NAME_LAST), COUNT(*)
FROM database 
GROUP BY LENGTH(NAME_LAST)
ORDER BY LENGTH(NAME_LAST) DESC;
4

3 回答 3

2

Db2 不会修剪尾随空格,除非您使用例如RTRIM

$ db2 "create table t(v varchar(120))"
$ db2 "insert into t values space(120)"
$ db2 "select length(v) from v"

1          
-----------
        120

  1 record(s) selected.

$ db2 "select length(rtrim(v)) from v"

1          
-----------
          0

  1 record(s) selected.
于 2019-09-25T20:47:36.397 回答
0

这有助于回答您的问题吗?“如果分组表达式包含带有尾随空格的可变长度字符串,则组中的值在尾随空格的数量上可能不同,并且可能不具有相同的长度。在这种情况下,对分组表达式的引用仍然只指定每个组一个值,但一组值是从可用的一组值中任意选择的。因此,结果值的实际长度是不可预测的。 https://www.ibm.com/support/knowledgecenter/SSEPEK_12.0.0/sqlref/src/tpc/db2z_sql_groupbyclause.html

于 2019-12-12T18:19:19.827 回答
0

您可以有前导/尾随空格或其他不可打印的字符。尝试在选择的列周围连接引号或其他一些字符,它会为您突出显示它。或者正如@mao 建议的那样显示十六进制值

于 2019-09-25T17:25:05.117 回答