2009-06-26 30 views
12

tôi thêm một vài tính năng mới cho một dự án nhỏ tôi đang làm việc trên và một trong số họ là alpha pagination mà trông giống nhưFetch hàng nơi ký tự đầu tiên không phải là chữ và số

# 0-9 ABCDE .. . XYZ

tôi có thể dễ dàng lấy các mục bằng chữ cái đầu tiên của họ sử dụng cái gì đó như

SELECT * FROM ... WHERE name LIKE 'A%' ... 

Grouping mọi thứ bắt đầu với một số và tất cả các nhân vật khác là một khó khăn hơn một chút, tôi cho rằng nó sẽ phải sử dụng MySQL REGEXP.

Chỉ cần được rõ ràng, tôi cần sự giúp đỡ tạo hai truy vấn mà sẽ lấy tất cả các hàng nơi

  • ký tự đầu tiên của một cột là số
  • ký tự đầu tiên của một cột không phải là chữ và số

Trả lời

33

nhân vật đầu tiên là số:

SELECT * FROM ... WHERE name REGEXP '^[0-9]'; 

charact Đầu tiên er không phải là chữ và số:

SELECT * FROM ... WHERE name REGEXP '^[^0-9A-Za-z]'; 

(Lưu ý rằng đây là khác biệt với NOT REGEXP ^[0-9A-Za-z], bởi vì bạn dường như chỉ muốn để phù hợp khi có trong thực tế, một nhân vật đầu tiên.)

Bạn có lẽ thay thế [^[:alnum:]] cho [^0-9A-Za-z], nhưng tôi chưa thử nghiệm. Bạn có thể chắc chắn thay thế [[:digit:]] cho [0-9], nhưng lâu hơn. :-)

Xem thêm MySQL REGEXP Reference.

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