我有一个查询,它提取数据库中所有姓氏的计数,并按姓氏的长度对计数进行排序。这是一个最大长度为 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;
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.
您可以有前导/尾随空格或其他不可打印的字符。 尝试在选择列时连接引号或其他一些字符,它会为您突出显示它。 或者正如@mao建议的那样显示十六进制值
这有助于回答您的问题吗? "如果分组表达式包含带有尾随空白的不同长度字符串,则组中的值可能会在尾随空白的数量上有所不同,并且可能不都具有相同的长度。在这种情况下,对 grouping-expression 的引用仍然只为每个组指定一个值,但组的值是从可用的值集中任意选择的。因此,结果值的实际长度是不可预测的。 https://www.ibm.com/support/knowledgecenter/SSEPEK_12.0.0/sqlref/src/tpc/db2z_sql_groupbyclause.html