我的表格包含
等列 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 列中检索数据WHERE它具有最长的文本字符串,即在当前表中它是;#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;#
答案 0 :(得分:68)
最简单的方法是:
select top 1 CR
from table t
order by len(CR) desc
请注意,如果有多个具有相同的最长长度,则只会返回一个值。
答案 1 :(得分:14)
你可以:
SELECT CR
FROM table1
WHERE len(CR) = (SELECT max(len(CR)) FROM table1)
在发布此消息后,我刚收到一年多的赞成票,我想补充一些信息。
DISTINCT
添加到我的查询(SELECT DISTINCT CR FROM ...
)中,以便只获取每个值一次。 将作为排序操作,但仅限于已找到的少数记录。再一次,没什么大不了的。LEN
通常不会导致此类查询变慢。答案 2 :(得分:8)
你可以这样:
SELECT TOP 1 CR
FROM tbl
ORDER BY len(CR) DESC
但我确定,有更优雅的方式来做到这一点
答案 3 :(得分:3)
对于Oracle 11g:
SELECT COL1
FROM TABLE1
WHERE length(COL1) = (SELECT max(length(COL1)) FROM TABLE1);
答案 4 :(得分:2)
这是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
答案 5 :(得分:1)
而不是SELECT max(len(CR))AS Max_Length_String FROM table1
使用
SELECT(CR)FROM table1
WHERE len(CR)=(SELECT max(len(CR))FROM table1)
答案 6 :(得分:1)
对于Postgres:
SELECT column
FROM table
WHERE char_length(column) = (SELECT max(char_length(column)) FROM table )
这将为你提供字符串本身,修改后来自@Thorsten Kettner的postgres回答
答案 7 :(得分:1)
通过两个查询,您可以实现此目的。这是为了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;
答案 8 :(得分:0)
要回答您的问题,并获得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)
答案 9 :(得分:0)
SELECT CITY,LENGTH(CITY) FROM STATION GROUP BY CITY ORDER BY LENGTH(CITY) ASC LIMIT 1;
SELECT CITY,LENGTH(CITY) FROM STATION GROUP BY CITY ORDER BY LENGTH(CITY) DESC LIMIT 1;
答案 10 :(得分:0)
如果列数据类型为文本,则应使用 DataLength 函数,例如:
select top 1 CR, DataLength(CR)
from tbl
order by DataLength(CR) desc
答案 11 :(得分:0)
您必须通过应用group by或in查询来进行一些更改。
"SELECT CITY,LENGTH(CITY) FROM STATION ORDER BY LENGTH(CITY) DESC LIMIT 1;"
它将返回城市中最长的城市名称。
答案 12 :(得分:0)
您可以在MySQL中使用
(SELECT CITY,
LENGTH(CITY) AS CHR_LEN
FROM STATION
ORDER BY CHR_LEN ASC,
CITY
LIMIT 1)
UNION
(SELECT CITY,
LENGTH(CITY) AS CHR_LEN
FROM STATION
ORDER BY CHR_LEN DESC,
CITY
LIMIT 1)