SQLIte MAX против Postgresql GREATEST, со строками

Согласно некоторым другим сообщениям, в SQLite функция max () эквивалентна функции Postgresql GREATEST (). Может кто-нибудь объяснить странное поведение функции SQlite max со строками:

    select max ('rb','VISA', 'Visa', 'Visa Card1', 'VISA VISA Card', 'Visaaa')

возвращает rb. Почему?!? Я ожидал, что в результате будет возвращена самая длинная строка VISA VISA Card ...

Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
0
0
392
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Он возвращает наивысшее значение в соответствии с представлением символа в байтах (более высокие значения в нижнем регистре, чем в верхнем регистре).

Перейдите на 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;

Результаты в: -

  • Обратите внимание: результат будет произвольным (от самой длинной строки), если будет несколько строк с одинаковой самой длинной длиной.

И есть ли способ получить самую длинную строку?

zlatko 08.09.2018 12:36
Ответ принят как подходящий

Во-первых, длина строки не имеет значения. Он ищет наивысшее значение в соответствии с последовательностью сортировки.

Во-вторых, последовательность сортировки по умолчанию - ДВОИЧНАЯ, поэтому она проверяет значения ASCII.

В-третьих, не имеет значения, что вы используете MAX() как агрегатную или скалярную функцию, однако вы используете ее, и она дает тот же результат.

Наконец, утверждение о том, что PostgreSQL дает самую длинную строку при использовании GREATEST (), тоже неверно ...

  • Просто у него другая последовательность сопоставления (в каком порядке оцениваются символы): http://sqlfiddle.com/#!15/6fbe6/4

Хорошо, есть ли другой способ получить самую длинную строку?

zlatko 08.09.2018 12:55

С стол вы можете перепрыгнуть через несколько обручей ... sqlfiddle.com/#!5/33d57/8(Добавьте WHERE rank=0, чтобы получить самые длинные строки, или WHERE length_rank=0 AND string_rank=0, чтобы получить только одну строку ...)

MatBailie 08.09.2018 13:03

Другие вопросы по теме