Tôi muốn lấy tất cả các ký tự trong một trường trước một khoảng trắng
Ví dụ, nếu field1
là"chara ters"
Tôi muốn nó trở lại "chara"
Câu lệnh chọn này trông như thế nào?
Tôi muốn lấy tất cả các ký tự trong một trường trước một khoảng trắng
Ví dụ, nếu field1
là"chara ters"
Tôi muốn nó trở lại "chara"
Câu lệnh chọn này trông như thế nào?
Câu trả lời:
SELECT LEFT(field1,LOCATE(' ',field1) - 1)
Lưu ý rằng nếu chuỗi được đề cập không chứa khoảng trắng, điều này sẽ trả về một chuỗi trống.
select SUBSTRING_INDEX( field1, ' ', 1 ) from table;
sẽ là lựa chọn nếu chúng ta muốn có một chuỗi hoàn chỉnh nếu không có khoảng trắng.
SUBSTRING_INDEX
) là "tốt hơn" như một giải pháp chung vì nó sẽ giữ lại các giá trị không chứa dấu phân cách, thay vì dẫn đến một giá trị trống.
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 đối với một số người. Nó sử dụng hàm SUBSTRING_INDEX MySQL . 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.
Điều này trả về 'chara':
SELECT SUBSTRING_INDEX( field1, ' ', 1 )
Điều này trả về 'ters':
SELECT SUBSTRING_INDEX( field1, ' ', -1 )
Chi tiết
Giá trị dương sẽ tìm ký tự được chỉ định của bạn 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 cần tìm trước khi trả về đoạ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, một -2 sẽ trả về mọi thứ ở bên phải của khoảng trống 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ề.
Bạn sẽ cần một số hoạt động chuỗi cho điều đó. Giả sử mọi trường đều có ít nhất một ký tự khoảng trắng:
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;
SELECT SUBSTR(field1, 1, LOCATE(' ', field1)) FROM your_table;