2013-06-30 46 views
7

Tôi có bảng mà tôi trích xuất một số giá trị, một giá trị cột có thể chứa "value1 | value2 | value3", nhưng tôi chỉ muốn nhận các ký tự trước | - "giá trị1".MySQL nhận được tất cả các ký tự trước ký tự cụ thể

Đây là những gì tôi đã thử, nhưng nó không hoạt động .. Tôi đang làm gì sai? Cảm ơn!

$ sql = "SELECT * LEFT ('Like', VỊ ('|', 'Like') - 1) TỪ $ tablename ĐÂU Parent = '0' AND Loại LIKE 'top' ORDER BY Order ASC ";

Tôi muốn sử dụng này cho TẤT CẢ các giá trị, chứ không phải chỉ là một lĩnh vực ..

Trả lời

10

bạn cần báo cáo kết quả sau đây để nhận được rằng phần [ColName]:

LEFT([ColName],INSTR([ColName],"|")-1) 

Nếu bạn muốn chọn nhiều cột vào cùng một cột recordset bạn có thể kết hợp tất cả với một cái gì đó như sau:

SELECT LEFT(ColName,INSTR(ColName,"|")-1) AS FirstValue From $TableName; 
UNION ALL 
SELECT LEFT(ColName2,INSTR(ColName2,"|")-1) AS FirstValue From $TableName; 

Nếu bạn muốn để sử dụng điều này trên nhiều cột, hãy tạo tập lệnh sql.

5

Hai điều: (1) bạn không có dấu phẩy giữa * và cụm từ bạn đang cố gắng thực hiện với LEFT và (2) bạn đang đặt like trong dấu ngoặc kép, vì vậy các chức năng đang hoạt động trên giá trị không đổi like thay vì cột của bạn có tên là like. Hãy thử đặt like trong backticks.

SELECT *, LEFT(`Like`, LOCATE('|', `Like`)-1) 
... 

Bạn cũng có thể sử dụng MySQL SUBSTRING_INDEX chức năng cho việc này:

SELECT *, SUBSTRING_INDEX(`Like`, '|', 1) 
... 
+0

Cảm ơn, như giải pháp SUBSTRING_INDEX hơn – zhihong

0

Tôi nghĩ rằng có một cách dễ dàng:

strSplit(ColName,'|',1) 

Tôi thích hợp?

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