2014-02-19 52 views
26

我一个表中包含像如何找到最长的字符串表中的列数据

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 

但retuns

Max_Length_String 
---------------------------------------- 
26 

,但我需要的不是长度(26),我想这样的

Max_Length_String 
---------------------------------------- 
;#WR_1;#WR_2;#WR_3;#WR_4;# 

回答

47

最简单的方法是:

select top 1 CR 
from table t 
order by len(CR) desc 

注意,这只会返回一个值,如果有多个具有相同长度最长。

+0

完美!!!!它的工作原理。谢谢你的及时答复。如何解析这个字符串**;#WR_1;#WR_2;#WR_3;#WR_4;#**像这样'WR_1,WR_2,WR_3,WR_4作为一列数据。 – vuyy1182

+0

使用Access,SELECT TOP返回连接。 – HansUp

+1

“访问没有很好的功能” - 这看起来不像一个直接的“替换()”函数吗? –

9

您可以:

SELECT CR 
FROM table1 
WHERE len(CR) = (SELECT max(len(CR)) FROM table1) 

When jus jus在发布这篇文章后一年多的时间里,我收到了一个赞成票,我想补充一些信息。

  • 此查询为所有值提供最大长度。通过TOP 1查询,您只能获得其中的一个,这通常是不需要的。
  • 此查询必须可能读取表格两次:全表扫描以获取最大长度,另一个全表扫描以获取该长度的所有值。然而,这些操作是非常简单的操作,因此速度很快。通过TOP 1查询,DBMS从表中读取所有记录,然后对其进行排序。所以这个表只读一次,但对整个表的排序操作是相当重要的任务,在大型表上可能会很慢。
  • 通常会将DISTINCT添加到我的查询(SELECT DISTINCT CR FROM ...)中,以便每次只获取一次值。那是一个排序操作,但只有在已经发现的几个记录。再次,没有什么大不了的。
  • 如果必须经常处理字符串长度,可以考虑为其创建计算列(计算字段)。这从Access 2010女士是可用的。但阅读此显示您不能索引MS Access中的计算的字段。只要这是真的,他们几乎没有任何好处。在字符串上应用LEN通常不会使查询变慢。
+0

总体良好点,但是如果你考虑一下,TOP N命令不需要整个表的排序,只需要一个大小为N的缓冲区。在初始表s是否可以在缓冲区中执行二进制插入操作,以便只有比目前为止所看到的N大的项目。 –

7

你可以这样说:

SELECT TOP 1 CR 
FROM tbl 
ORDER BY len(CR) DESC 

,但我敢肯定,有一个更优雅的方式来做到这一点

1

改为选择最多的(LEN(CR))AS Max_Length_String FROM表1

使用

SELECT(CR)FROM表1

WHE RE len(CR)=(SELECT max(len(CR))FROM table1)

1

这是“postgres中最长的字符串”谷歌搜索的第一个结果,所以我会把我的答案放在这里寻找postgres解。

SELECT max(char_length(column)) AS Max_Length_String FROM table

Postgres的文档:http://www.postgresql.org/docs/9.2/static/functions-string.html

+0

OP想要最长的字符串,而不是最长的字符串的长度。 –

2

对于的Oracle 11g:

SELECT COL1 
FROM TABLE1 
WHERE length(COL1) = (SELECT max(length(COL1)) FROM TABLE1); 
1

Postgres的:

SELECT column 
FROM table 
WHERE char_length(column) = (SELECT max(char_length(column)) FROM table) 

这会给你字符串本身,修改从Postgres的@Thorsten Kettner回答

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; 
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) 
相关问题