2011-08-27 28 views
6
SELECT * FROM dbname WHERE text = 'a%' 
(this can get all the `text` fields which begin with the letter "a".) 

Nhưng cách lấy các trường có chữ cái đầu tiên! = [A-z]?thư mysql truy vấn php đầu tiên! = [A-z]

ví dụ:

\"hello\" // this first letter begin as \ not range in a-z 
いけ // also first letter not begin range in a-z 
... 
may also have a white space as the first character. 

Vậy làm thế nào bạn có thể sử dụng php mysql query để có được tất cả các loại kết quả mà các chữ cái đầu tiên !=[a-z]?

Trả lời

8

Hãy thử điều này:

SELECT * FROM dbname WHERE text REGEXP '^[^a-zA-Z]'; 

Đó là nếu bạn muốn nó được phân biệt dạng chữ (chữ hoa hay chữ thường). Nếu bạn muốn cho phép chữ cái in hoa A-Z sau đó chỉ cần sử dụng:

SELECT * FROM dbname WHERE text REGEXP '^[^a-z]'; 

Về cơ bản các biểu thức chính quy nói phù hợp với bất kỳ chuỗi mà không có chữ cái a-z vào đầu của chuỗi.

1
SELECT * FROM dbname WHERE text NOT REGEXP '^[a-z]'; 
1

Một phi REGEXP giải pháp là sử dụng BETWEEN:

SELECT * FROM dbname WHERE LEFT(text, 1) NOT BETWEEN 'a' AND 'Z'; 

này cần được nhanh hơn so với sử dụng REGEXP, kể từ MySQL có thể sử dụng chỉ số trên GIỮA truy vấn , trong khi nó không thể trên các truy vấn REGEXP.

Tuy nhiên, tôi không có sẵn điểm chuẩn, không nên khó kiểm tra.

+0

MySQL sẽ không sử dụng chỉ mục trên văn bản khi bạn đã bao bọc nó trong một hàm. Bạn phải cô lập trường được lập chỉ mục trong so sánh trong câu lệnh where cho mysql để sử dụng một chỉ mục trên đó. – Riedsio

+0

@Riedsio ý của bạn là gì? 'LEFT' có thể sử dụng các chỉ số. – alexn

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