Понимание того, почему длина в SQL DB2 будет возвращать короткие результаты в качестве максимальной длины символа - PullRequest
1 голос
/ 25 сентября 2019

У меня есть запрос, который извлекает счетчик всех фамилий в нашей БД и сортирует их по длине фамилии.Это поле VARCHAR с максимальной длиной 120.

Некоторые результаты с более короткой длиной символов - 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;

Ответы [ 2 ]

1 голос
/ 25 сентября 2019

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.
0 голосов
/ 25 сентября 2019

Вы можете использовать начальные / конечные пробелы или другие непечатаемые символы.Попробуйте объединить кавычки или некоторые другие символы вокруг выделенного столбца, и он подскажет вам это.Или, как @mao предлагает показать шестнадцатеричные значения

...