Bạn thử truy vấn vấn đề này xem
#Lấy 15 ký tự từ ký tự thứ 2
CHỌN CHUỖI CON [Cột A, TỪ 2 CHO 15] TỪ YourTable
Đầ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ấpHà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ỉnhCú 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
6Giả 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ứ baKhi 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 sau9058 Goldfield Avenue\n Yonkers, NY 10701
2Bạ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ư sau9058 Goldfield Avenue\n Yonkers, NY 10701
7Truy vấn SQL ở trên sẽ trả về tập kết quả sau
9058 Goldfield Avenue\n Yonkers, NY 10701
8Hà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áchGiả sử học sinh của bạn có tên đệm như sau
9058 Goldfield Avenue\n Yonkers, NY 10701
1Lú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ưới9058 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àmLệ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ứ ba9058 Goldfield Avenue\n Yonkers, NY 10701
8Bâ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
0Truy vấn SQL hoàn chỉnh bên dưới
9058 Goldfield Avenue\n Yonkers, NY 10701
1Sẽ tạo ra tập kết quả sau
9058 Goldfield Avenue\n Yonkers, NY 10701
2Bâ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ỗiTiế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
3Thủ tục
+-----------------------+--------------------+
| address_one | address_two |
+-----------------------+--------------------+
| 9058 Goldfield Avenue | Yonkers, NY 10701 |
+-----------------------+--------------------+
4 ở trên chấp nhận hai đối số
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+-----------------------+--------------------+ | address_one | address_two | +-----------------------+--------------------+ | 9058 Goldfield Avenue | Yonkers, NY 10701 | +-----------------------+--------------------+
Đầ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 |
+-----------------------+--------------------+
5Vò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
20Sau 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ỗiDướ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
4Và đó 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
24cô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