2014-02-19 51 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) 
相關問題