Ответ 1
Самый простой способ:
select top 1 CR
from table t
order by len(CR) desc
Обратите внимание, что это будет возвращать только одно значение, если несколько с той же самой длинной длиной.
У меня таблица содержит столбцы типа
Prefix | CR
----------------------------------------
g | ;#WR_1;#WR_2;#WR_3;#WR_4;#
v | ;#WR_3;#WR_4;#
j | WR_2
m | WR_1
d | ;#WR_3;#WR_4;#
f9 | WR_3
Я хочу получить данные из столбца CR, где у него самая длинная текстовая строка, т.е. в текущей таблице она ; # WR_1; # WR_2; # WR_3; # WR_4; #. Я использую
SELECT max(len(CR)) AS Max_Length_String FROM table1
Но он перенастраивает
Max_Length_String
----------------------------------------
26
Но мне нужна не длина (26), я хотел как это
Max_Length_String
----------------------------------------
;#WR_1;#WR_2;#WR_3;#WR_4;#
Самый простой способ:
select top 1 CR
from table t
order by len(CR) desc
Обратите внимание, что это будет возвращать только одно значение, если несколько с той же самой длинной длиной.
Вы можете:
SELECT CR
FROM table1
WHERE len(CR) = (SELECT max(len(CR)) FROM table1)
Только после того, как вы отправили это сообщение, я получил дополнительную информацию. Я хотел бы добавить некоторую информацию.
DISTINCT
к моему запросу (SELECT DISTINCT CR FROM ...
), чтобы получить каждое значение только один раз. Это будет операция сортировки, но только на несколько найденных записей. Опять же, неважно.LEN
в строках обычно не означает, что такие запросы замедляются.Вы можете сделать это следующим образом:
SELECT TOP 1 CR
FROM tbl
ORDER BY len(CR) DESC
но я уверен, есть более элегантный способ сделать это
Это был первый результат поиска google-поиска "longest string in postgres", поэтому я отвечу здесь для тех, кто ищет решение postgres.
SELECT max(char_length(column)) AS Max_Length_String FROM table
postgres docs: http://www.postgresql.org/docs/9.2/static/functions-string.html
Для Oracle 11g:
SELECT COL1
FROM TABLE1
WHERE length(COL1) = (SELECT max(length(COL1)) FROM TABLE1);
Вместо SELECT max (len (CR)) AS Max_Length_String FROM table1
Использование
SELECT (CR) FROM table1
ГДЕ len (CR) = (SELECT max (len (CR)) FROM table1)
Для Postgres:
SELECT column
FROM table
WHERE char_length(column) = (SELECT max(char_length(column)) FROM table )
Это даст вам строку, измененную для postgres из ответа @Thorsten Kettner
С двумя запросами вы можете добиться этого. Это для mysql
//will select shortest length coulmn and display its length.
// only 1 row will be selected, because we limit it by 1
SELECT column, length(column) FROM table order by length(column) asc limit 1;
//will select shortest length coulmn and display its length.
SELECT CITY, length(city) FROM STATION order by length(city) desc limit 1;
Чтобы ответить на ваш вопрос и получить Prefix
тоже, для MySQL вы можете сделать:
select Prefix, CR, length(CR) from table1 order by length(CR) DESC limit 1;
и он вернет
+-------+----------------------------+--------------------+
| Prefix| CR | length(CR) |
+-------+----------------------------+--------------------+
| g | ;#WR_1;#WR_2;#WR_3;#WR_4;# | 26 |
+-------+----------------------------+--------------------+
1 row in set (0.01 sec)