2011-07-24 60 views
44

我有大量的單詞的數據庫,但我想只選擇那些記錄字符長度等於給定數量(例如,在案例3):查詢字符長度的條件?

$query = ("SELECT * FROM $db WHERE conditions AND length = 3"); 

但是,這是行不通的。 ..有人可以告訴我正確的查詢嗎?

回答

79

對不起,我不知道你在談論哪些SQL平臺:

在MySQL:

在MSSQL
$query = ("SELECT * FROM $db WHERE conditions AND LENGTH(col_name) = 3"); 

$query = ("SELECT * FROM $db WHERE conditions AND LEN(col_name) = 3"); 

長度()(MySQL的)或LEN()(MSSQL)函數將返回可用作WHERE子句中的條件的列中字符串的長度。

編輯

我知道這是真的老了,但想到我會擴大我的答案,因爲,正如保羅·布埃諾正確地指出,你最有可能想要的字符數,而不是數量字節。感謝Paulo。

因此,對於MySQL,有CHAR_LENGTH()。下面的例子突出的CHAR_LENGTH()LENGTH()之間的區別:

CREATE TABLE words (
    word VARCHAR(100) 
) ENGINE INNODB DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci; 

INSERT INTO words(word) VALUES('快樂'), ('happy'), ('hayır'); 

SELECT word, LENGTH(word) as num_bytes, CHAR_LENGTH(word) AS num_characters FROM words; 

+--------+-----------+----------------+ 
| word | num_bytes | num_characters | 
+--------+-----------+----------------+ 
| 快樂 |   6 |    2 | 
| happy |   5 |    5 | 
| hayır |   6 |    5 | 
+--------+-----------+----------------+ 

要小心,如果你處理的多字節字符。

+1

MySQL的句法是一樣的SQLite的語法。爲我工作很好。 – Jon

+3

在postgres中你可以使用像mysql這樣的「長度」函數 –

+2

當心!在多字節字符集中,它可能會有所不同。看到[這](http://stackoverflow.com/questions/1870937/mysql-how-to-select-data-by-string-length) –

1
SELECT * 
    FROM my_table 
    WHERE substr(my_field,1,5) = "abcde"; 
1

我想你想要這樣的:

SELECT * 從dbo.table 其中DATALENGTH(列)= 3