Tách chuỗi mysql

Nguyên bản được gửi bởi Admin

Bạn thử truy vấn vấn đề này xem

  1. #Lấy 15 ký tự từ ký tự thứ 2

  2. CHỌN CHUỖI CON [Cột A, TỪ 2 CHO 15] TỪ YourTable

Xin lỗi, dữ liệu mình demo còn thiếu những trường hợp khác, nên không thể sử dụng chuỗi con như cách của bạn được, cụ thể.
Đầu vào.
Cột A
[[100002],[5]]
[[100002,100002],[5,8]]
[[100002,100003],[6,8]]
[[100002,100002,100002],[5,8,9]]

Đầu ra.
Cột A
[100002]
[100002,100002]
[100002,100003]
[100002,100002,100002]

Mong nhận được sự giúp đỡ

- - - Nội dung đã được cập nhật ngày 27-06-2014 lúc 11. 26 AM - - -

Mình đã viết câu SQL như bên dưới để ra kết quả đúng như yêu cầu, nhưng còn phức tạp quá, ai đơn giản hóa được nó, giúp mình với. [

Select Substring[C.A,1,Length[C.A]-1] AS 'RESULT' FROM
[Select substring_index[B.A,'[',2] as A FROM
		[Select Substring[Zh.mconfig,2,Length[Zh.mconfig]-2] AS A 
		 FROM anheisg.tb_zhangjie AS Zh] AS B] AS C

Để tách một chuỗi trong MySQL, bạn cần sử dụng hàm

9058 Goldfield Avenue\n Yonkers, NY 10701
5 do MySQL cung cấp

Hàm

9058 Goldfield Avenue\n Yonkers, NY 10701
6 cho phép bạn trích xuất một phần của chuỗi hoàn chỉnh

Cú pháp của hàm như sau

SUBSTRING_INDEX[expression, delimiter, count];

Hàm yêu cầu bạn truyền 3 tham số như mô tả bên dưới

  • Tham số đầu tiên sẽ là nguồn chuỗi để hoạt động trên. Bạn có thể chuyển một biểu thức hoặc tên cột
  • Tham số thứ hai sẽ là dấu phân cách cho hàm biết vị trí dừng trích xuất
  • Tham số thứ ba sẽ là số lần xuất hiện của dấu phân cách. Bạn có thể chuyển số dương hoặc số âm

Hãy xem một ví dụ về hoạt động của

9058 Goldfield Avenue\n Yonkers, NY 10701
6

Giả sử bạn có một chuỗi địa chỉ như sau

9058 Goldfield Avenue\n Yonkers, NY 10701

Giả sử bạn muốn tách địa chỉ trên dựa trên sự xuất hiện của ký hiệu xuống dòng

9058 Goldfield Avenue\n Yonkers, NY 10701
8

Đây là cách bạn làm điều đó với hàm

9058 Goldfield Avenue\n Yonkers, NY 10701
6

________số 8

Truy vấn trên sẽ trả về tập kết quả sau

+-----------------------+--------------------+
| address_one           | address_two        |
+-----------------------+--------------------+
| 9058 Goldfield Avenue |  Yonkers, NY 10701 |
+-----------------------+--------------------+

Hàm

9058 Goldfield Avenue\n Yonkers, NY 10701
6 quét nguồn chuỗi để tìm chuỗi dấu phân cách, sau đó trích xuất chuỗi dựa trên số lần xuất hiện của dấu phân cách mà bạn đã chuyển làm tham số thứ ba

Khi bạn truyền một số âm, thì hàm sẽ duyệt chuỗi từ cuối thay vì từ đầu chuỗi

Hãy xem một ví dụ khác với dữ liệu bảng MySQL. Giả sử bạn có một bảng

SELECT 
  SUBSTRING_INDEX["9058 Goldfield Avenue\n Yonkers, NY 10701", '\n', 1] 
    AS address_one,
  SUBSTRING_INDEX["9058 Goldfield Avenue\n Yonkers, NY 10701", '\n', -1] 
    AS address_two;
1 với dữ liệu sau

9058 Goldfield Avenue\n Yonkers, NY 10701
2

Bạn có thể chia các chuỗi trong cột

SELECT 
  SUBSTRING_INDEX["9058 Goldfield Avenue\n Yonkers, NY 10701", '\n', 1] 
    AS address_one,
  SUBSTRING_INDEX["9058 Goldfield Avenue\n Yonkers, NY 10701", '\n', -1] 
    AS address_two;
2 ở trên thành
SELECT 
  SUBSTRING_INDEX["9058 Goldfield Avenue\n Yonkers, NY 10701", '\n', 1] 
    AS address_one,
  SUBSTRING_INDEX["9058 Goldfield Avenue\n Yonkers, NY 10701", '\n', -1] 
    AS address_two;
3 và
SELECT 
  SUBSTRING_INDEX["9058 Goldfield Avenue\n Yonkers, NY 10701", '\n', 1] 
    AS address_one,
  SUBSTRING_INDEX["9058 Goldfield Avenue\n Yonkers, NY 10701", '\n', -1] 
    AS address_two;
4 bằng cách sử dụng hàm
9058 Goldfield Avenue\n Yonkers, NY 10701
5 như sau

9058 Goldfield Avenue\n Yonkers, NY 10701
7

Truy vấn SQL ở trên sẽ trả về tập kết quả sau

9058 Goldfield Avenue\n Yonkers, NY 10701
8

Hàm

9058 Goldfield Avenue\n Yonkers, NY 10701
6 có thể được gọi là tham số đầu tiên của một lệnh gọi
9058 Goldfield Avenue\n Yonkers, NY 10701
6 khác để bạn có thể trích xuất một phần của chuỗi nằm ở giữa các dấu phân cách

Giả sử học sinh của bạn có tên đệm như sau

9058 Goldfield Avenue\n Yonkers, NY 10701
1

Lúc đầu, có vẻ như việc gọi

9058 Goldfield Avenue\n Yonkers, NY 10701
6 và chuyển số
SELECT 
  SUBSTRING_INDEX["9058 Goldfield Avenue\n Yonkers, NY 10701", '\n', 1] 
    AS address_one,
  SUBSTRING_INDEX["9058 Goldfield Avenue\n Yonkers, NY 10701", '\n', -1] 
    AS address_two;
9 làm tham số thứ ba có thể hiệu quả

Nhưng truyền số

SELECT 
  SUBSTRING_INDEX["9058 Goldfield Avenue\n Yonkers, NY 10701", '\n', 1] 
    AS address_one,
  SUBSTRING_INDEX["9058 Goldfield Avenue\n Yonkers, NY 10701", '\n', -1] 
    AS address_two;
9 thì hàm sẽ lấy ra cả họ và tên đệm như hình bên dưới

9058 Goldfield Avenue\n Yonkers, NY 10701
5

Để chỉ trích xuất tên đệm, bạn cần gọi hàm

9058 Goldfield Avenue\n Yonkers, NY 10701
5 hai lần, với lần gọi thứ hai là tham số đầu tiên của hàm

Lệnh gọi hàm bên trong phải giống như trên, trong khi lệnh gọi bên ngoài sẽ trích xuất chuỗi bằng cách sử dụng

+-----------------------+--------------------+
| address_one           | address_two        |
+-----------------------+--------------------+
| 9058 Goldfield Avenue |  Yonkers, NY 10701 |
+-----------------------+--------------------+
2 làm tham số thứ ba

9058 Goldfield Avenue\n Yonkers, NY 10701
8

Bây giờ tên đệm sẽ được trích xuất chính xác như hình bên dưới

9058 Goldfield Avenue\n Yonkers, NY 10701
0

Truy vấn SQL hoàn chỉnh bên dưới

9058 Goldfield Avenue\n Yonkers, NY 10701
1

Sẽ tạo ra tập kết quả sau

9058 Goldfield Avenue\n Yonkers, NY 10701
2

Bây giờ bạn đã học cách sử dụng hàm

9058 Goldfield Avenue\n Yonkers, NY 10701
5 để tách một chuỗi

Tiếp theo, hãy xem cách sử dụng thủ tục được lưu trữ để tách một chuỗi bằng một dấu phân cách cụ thể

Chuỗi phân tách MySQL với một thủ tục được lưu trữ

Bạn cũng có thể tách một chuỗi trong MySQL bằng cách sử dụng thủ tục được lưu trữ

Bạn cần tạo quy trình sau trong cơ sở dữ liệu của mình

9058 Goldfield Avenue\n Yonkers, NY 10701
3

Thủ tục

+-----------------------+--------------------+
| address_one           | address_two        |
+-----------------------+--------------------+
| 9058 Goldfield Avenue |  Yonkers, NY 10701 |
+-----------------------+--------------------+
4 ở trên chấp nhận hai đối số

  • +-----------------------+--------------------+
    | address_one           | address_two        |
    +-----------------------+--------------------+
    | 9058 Goldfield Avenue |  Yonkers, NY 10701 |
    +-----------------------+--------------------+
    
    5 để tách chuỗi
  • +-----------------------+--------------------+
    | address_one           | address_two        |
    +-----------------------+--------------------+
    | 9058 Goldfield Avenue |  Yonkers, NY 10701 |
    +-----------------------+--------------------+
    
    6 cho dấu phân cách chuỗi

Đầu tiên, thủ tục sẽ tạo một bảng tạm thời để lưu trữ từng phần của chuỗi cho đến vị trí dấu phân cách.

Sau đó, một vòng lặp

+-----------------------+--------------------+
| address_one           | address_two        |
+-----------------------+--------------------+
| 9058 Goldfield Avenue |  Yonkers, NY 10701 |
+-----------------------+--------------------+
7 sẽ được thực hiện miễn là tìm thấy
+-----------------------+--------------------+
| address_one           | address_two        |
+-----------------------+--------------------+
| 9058 Goldfield Avenue |  Yonkers, NY 10701 |
+-----------------------+--------------------+
6 trong
+-----------------------+--------------------+
| address_one           | address_two        |
+-----------------------+--------------------+
| 9058 Goldfield Avenue |  Yonkers, NY 10701 |
+-----------------------+--------------------+
5

Vòng lặp sẽ thêm các đoạn của chuỗi vào bảng

9058 Goldfield Avenue\n Yonkers, NY 10701
20

Sau khi tất cả các phần của chuỗi được thêm vào bảng, truy vấn

9058 Goldfield Avenue\n Yonkers, NY 10701
21 sẽ truy xuất các hàng cho chuỗi

Dưới đây là một số kết quả của việc chạy thủ tục được lưu trữ

9058 Goldfield Avenue\n Yonkers, NY 10701
4

Và đó là cách bạn có thể tách chuỗi bằng thủ tục lưu trữ MySQL

Nếu bạn đang phát triển một dự án ứng dụng web, tốt hơn hết là để ngôn ngữ lập trình xử lý phần phụ trợ của ứng dụng của bạn phân tách chuỗi thay vì sử dụng các truy vấn MySQL

Ví dụ, JavaScript có phương thức

9058 Goldfield Avenue\n Yonkers, NY 10701
22 cho phép bạn tách một
9058 Goldfield Avenue\n Yonkers, NY 10701
23 thành một
9058 Goldfield Avenue\n Yonkers, NY 10701
24

công thức mã JavaScript. tách chuỗi thành mảng

Các ngôn ngữ như JavaScript và PHP có nhiều hàm có thể giúp bạn thao tác các giá trị chuỗi với độ chính xác cao hơn

Chủ Đề