Согласно некоторым другим сообщениям, в SQLite функция max () эквивалентна функции Postgresql GREATEST (). Может кто-нибудь объяснить странное поведение функции SQlite max со строками:
select max ('rb','VISA', 'Visa', 'Visa Card1', 'VISA VISA Card', 'Visaaa')
возвращает rb. Почему?!? Я ожидал, что в результате будет возвращена самая длинная строка VISA VISA Card ...



Он возвращает наивысшее значение в соответствии с представлением символа в байтах (более высокие значения в нижнем регистре, чем в верхнем регистре).
Перейдите на select max ('rb','vISA', 'Visa', 'Visa Card1', 'VISA VISA Card', 'Visaaa'), и результат будет ВИЗА.
And is there any way to retrieve the longest string?
Если вам нужна самая длинная строка и предполагается, что данные находятся в столбце (в данном случае с именем mystring) таблицы (в данном случае с именем тестовое задание), вы можете использовать: -
SELECT mystring FROM test ORDER BY length(mystring) DESC LIMIT 1;
например
DROP TABLE IF EXISTS test;
CREATE TABLE IF NOT EXISTS test (mystring TEXT);
INSERT INTO test VALUES ('rb'),('VISA'),('Visa Card1'),('VISA VISA Card'),('Visaaa');
SELECT mystring FROM test ORDER BY length(mystring) DESC LIMIT 1;
Результаты в: -
Во-первых, длина строки не имеет значения. Он ищет наивысшее значение в соответствии с последовательностью сортировки.
Во-вторых, последовательность сортировки по умолчанию - ДВОИЧНАЯ, поэтому она проверяет значения ASCII.
r имеет значение 162, а V имеет значение 126, поэтому r выше ...В-третьих, не имеет значения, что вы используете MAX() как агрегатную или скалярную функцию, однако вы используете ее, и она дает тот же результат.
Наконец, утверждение о том, что PostgreSQL дает самую длинную строку при использовании GREATEST (), тоже неверно ...
Хорошо, есть ли другой способ получить самую длинную строку?
С стол вы можете перепрыгнуть через несколько обручей ... sqlfiddle.com/#!5/33d57/8(Добавьте WHERE rank=0, чтобы получить самые длинные строки, или WHERE length_rank=0 AND string_rank=0, чтобы получить только одну строку ...)
И есть ли способ получить самую длинную строку?