2011-07-24 32 views
44

Tôi có một cơ sở dữ liệu với một số lượng lớn các lời nhưng tôi muốn chỉ chọn những hồ sơ, nơi chiều dài nhân vật tương đương với một số lượng nhất định (trong ví dụ trường hợp 3):truy vấn WHERE condition to length length?

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

Nhưng điều này không làm việc. .. ai đó có thể chỉ cho tôi truy vấn đúng không?

Trả lời

79

Xin lỗi, tôi đã không chắc chắn mà SQL nền tảng bạn đang nói về:

Trong MySQL:

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

trong MSSQL

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

Các LENGTH() (MySQL) hoặc hàm LEN() (MSSQL) sẽ trả về độ dài của một chuỗi trong một cột mà bạn có thể sử dụng như một điều kiện trong mệnh đề WHERE của bạn.

Sửa

Tôi biết điều này là thực sự cũ nhưng nghĩ rằng tôi muốn mở rộng câu trả lời của tôi bởi vì, như Paulo Bueno đúng chỉ ra, bạn rất có thể muốn số ký tự như trái ngược với số lượng byte. Cảm ơn Paulo.

Vì vậy, đối với MySQL có CHAR_LENGTH(). Ví dụ sau đây nhấn mạnh sự khác biệt giữa LENGTH() một CHAR_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 | 
+--------+-----------+----------------+ 

Hãy cẩn thận nếu bạn đang làm việc với các nhân vật đa byte.

+1

Cú pháp MySQL cũng giống như cú pháp SQLite. Làm việc tuyệt vời cho tôi. – Jon

+3

Trong postgres bạn có thể sử dụng "chiều dài" chức năng như trong mysql –

+2

Hãy coi chừng! Trong bộ ký tự nhiều byte, nó có thể khác nhau. Xem [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

Tôi nghĩ rằng bạn muốn điều này:

chọn * từ dbo.table nơi DATALENGTH (column_name) = 3

Các vấn đề liên quan