Tôi muốn để có được tất cả các ký tự trong một lĩnh vực trước một không gianNhận tất cả các ký tự trước khi không gian trong MySQL
Ví dụ, nếu field1
là "chara ters"
tôi muốn nó trở "chara"
gì câu lệnh chọn này sẽ như thế nào?
Tôi muốn để có được tất cả các ký tự trong một lĩnh vực trước một không gianNhận tất cả các ký tự trước khi không gian trong MySQL
Ví dụ, nếu field1
là "chara ters"
tôi muốn nó trở "chara"
gì câu lệnh chọn này sẽ như thế nào?
SELECT LEFT(field1,LOCATE(' ',field1) - 1)
Lưu ý rằng nếu chuỗi trong câu hỏi không chứa dấu cách, điều này sẽ trả về một chuỗi rỗng.
Bạn sẽ cần một số string operations cho điều đó. Giả sử mọi lĩnh vực có ít nhất một nhân vật không gian:
SELECT SUBSTR(field1, 0, LOCATE(' ', field1)) FROM your_table;
cách tiếp cận an toàn:
SELECT IF(
LOCATE(' ', field1),
SUBSTR(field1, 0, LOCATE(' ', field1)),
field1
) FROM your_table;
+1 cho phiên bản an toàn, mặc dù không rõ kết quả sẽ được trả lại khi trường không chứa trống. – Mchl
phải thay đổi 0 cho 1: 'SELECT SUBSTR (trường1, 1, LOCATE ('', field1)) TỪ your_table;' –
Dưới đây là một phương pháp khác hoạt động và có vẻ đơn giản hơn một chút. Nó sử dụng SUBSTRING_INDEX MySQL function. A 1 trả về mọi thứ trước khoảng trắng đầu tiên và -1 trả về mọi thứ sau khoảng trống cuối cùng.
này lợi nhuận 'Chara':
SELECT SUBSTRING_INDEX(field1, ' ', 1)
'ters' này lợi nhuận:
SELECT SUBSTRING_INDEX(field1, ' ', -1)
Chi tiết
Một giá trị tích cực sẽ tìm kiếm những nhân vật bạn đã xác định từ khi bắt đầu chuỗi và giá trị âm sẽ bắt đầu từ cuối chuỗi. Giá trị của số cho biết số lượng ký tự được chỉ định của bạn tìm kiếm trước khi trả về phần còn lại của chuỗi. Nếu ký tự bạn đang tìm kiếm không tồn tại, toàn bộ giá trị trường sẽ được trả về.
Trong trường hợp này, -2 sẽ trả về mọi thứ ở bên phải của không gian thứ hai đến cuối cùng, không tồn tại trong ví dụ này, vì vậy toàn bộ giá trị trường sẽ được trả về.
Điều này cũng hoạt động, nếu có chuỗi, không có trống, ví dụ 'chara' cũng sẽ hoạt động. – bernhardh
Điều này làm việc tuyệt vời khi nhận được phiên bản lớn + nhỏ của chuỗi phiên bản với các thành phần x.y.z. – thomthom
Điều này hoạt động tốt nhất khi bạn muốn toàn bộ trường được trả về nếu không tìm thấy ký tự. – stephentgrammer
+1 không biết về 'LEFT' – soulmerge
Nó trả về 'chara' với dấu cách. Bạn cần giảm kết quả LOCATE nếu không cần dấu phân cách cuối cùng: SELECT LEFT (trường1, LOCATE ('', field1) - 1) – Enyby
Điều này sẽ không hoạt động nếu trường chính của bạn không chứa khoảng trống. Chuỗi con sẽ trả về giá trị rỗng thay vì trả về toàn bộ chuỗi. Ví dụ: nếu trường của tôi chứa chuỗi con "chuỗi có thể-không-đúng-tên" chuỗi sẽ trả về không có gì thay vì "test-possible-incorrect-name". –