Ответ 1
SELECT name, LENGTH(name) AS mlen
FROM mytable
ORDER BY
mlen DESC
LIMIT 1
Если я скажу:
select max(length(Name))
from my_table
Я получаю результат как 18, но я также хочу получить соответствующие данные. Поэтому, если я скажу:
select max(length(Name)),
Name
from my_table
... это не работает. Я думаю, что должно быть самосоединение, которое я не могу понять.
Может ли кто-нибудь указать мне ключ?
SELECT name, LENGTH(name) AS mlen
FROM mytable
ORDER BY
mlen DESC
LIMIT 1
Отредактировано, будет работать для неизвестных значений max():
select name, length( name )
from my_table
where length( name ) = ( select max( length( name ) ) from my_table );
Хорошо, я не уверен, что вы используете (MySQL, SLQ Server, Oracle, MS Access..), но вы можете попробовать код ниже. Это работает в W3School пример БД. Вот попробуйте это:
SELECT city, max(length(city)) FROM Customers;
Использование:
SELECT mt.name
FROM MY_TABLE mt
GROUP BY mt.name
HAVING MAX(LENGTH(mt.name)) = 18
... предполагая, что вы знаете длину заранее. Если вы этого не сделаете, используйте:
SELECT mt.name
FROM MY_TABLE mt
JOIN (SELECT MAX(LENGTH(x.name) AS max_length
FROM MY_TABLE x) y ON y.max_length = LENGTH(mt.name)
Если вам нужны как max, так и min из одной таблицы:
select * from (
(select city, length(city) as maxlen from station
order by maxlen desc limit 1)
union
(select city, length(city) as minlen from station
order by minlen,city limit 1))a;
select *
from my_table
where length( Name ) = (
select max( length( Name ) )
from my_table
limit 1
);
Это включает в себя два сканирования таблицы, и поэтому может быть не очень быстро!
Select URColumnName From URTableName Where length(URColumnName ) IN
(Select max(length(URColumnName)) From URTableName);
Это даст вам записи в этом конкретном столбце с максимальной длиной.
Я полагаю, вы могли бы использовать такое решение, как этот:
select name, length(name)
from users
where id = (
select id
from users
order by length(name) desc
limit 1
);
Возможно, не оптимальное решение... Но, похоже, работает.
Используйте CHAR_LENGTH() вместо LENGTH(), как предложено в: MySQL - length() против char_length()
ВЫБЕРИТЕ имя, CHAR_LENGTH (имя) AS mlen ОТ mytable ORDER BY mlen DESC LIMIT 1