2011-07-24 14 views
44

kelimeleri çok sayıda bir veritabanı var ama karakter uzunluğu verilen bir sayıya eşit olduğu i sadece bu kayıtları seçmek için (örneğin davayı 3) istiyorum:WHERE koşulunun karakter uzunluğuna sorgulanması?

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

Ancak bu işe yaramaz. .. birisi bana doğru sorguyu gösterebilir mi? MySQL

:

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

MSSQL

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

UZUNLUĞU() (MySQL)

cevap

79

Üzgünüm, bahsettiğin hangi SQL platformu emin değildi veya LEN() (MSSQL) işlevi, WHERE yan tümcesinde bir koşul olarak kullanabileceğiniz bir sütundaki bir dizenin uzunluğunu döndürür.

Düzenleme

bu gerçekten eski biliyorum ama Paulo Bueno haklı olarak belirttiği gibi, sen sayısına karşı büyük olasılıkla karakter sayısını isteyen konum, çünkü benim cevap genişletmek düşündüm bayt. Teşekkürler Paulo.

Yani, MySQL için CHAR_LENGTH() var. Eğer çok baytlık karakterler ile uğraşıyoruz

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 | 
+--------+-----------+----------------+ 

Dikkatli olun: Aşağıdaki örnek LENGTH() arasındaki farkı bir CHAR_LENGTH() vurgulamaktadır.

+1

MySQL sözdizimi SQLite sözdizimi aynıdır dbo.table dan . Benim için harika çalıştı. – Jon

+3

Postgres'te mysql –

+2

'daki gibi "length" işlevini kullanabilirsiniz Dikkat! Çoklu bayt grafiklerinde farklı olabilir. Bkz. [This] (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

İstediğin düşünüyorum bu:

select * veri boyu (column_name) = 3