Hướng dẫn mysql select from comma separated list - mysql chọn từ danh sách được phân tách bằng dấu phẩy

Tôi có một cái bàn như thế này:

UID[int] NUMBERS[blob]
----------------------
1        1,13,15,20
2        3,10,15,20
3        3,15

Và tôi muốn kiểm tra xem 3 và 15 ở trong blob được gọi là số. Và có thể thấy giống như %% không thể được sử dụng

Chỉ có hàng có ID 2 và ba scoulb được chọn ...

Hỏi ngày 20 tháng 4 năm 2010 lúc 9:43Apr 20, 2010 at 9:43

1

Cái này cũng hoạt động:

SELECT * FROM table WHERE 3 IN [NUMBERS] AND 15 IN [NUMBERS]

Sử dụng In sẽ xem xét một chuỗi phân tách bằng dấu phẩy, ví dụ. Hai cái này

WHERE banana IN ['apple', 'banana', 'coconut']
WHERE 3 IN [2,3,6,8,90]

Thông tin tìm thấy trên trang này:

Tony Stark

7.9848 Huy hiệu vàng43 Huy hiệu bạc63 Huy hiệu Đồng8 gold badges43 silver badges63 bronze badges

Đã trả lời ngày 20 tháng 4 năm 2010 lúc 11:44Apr 20, 2010 at 11:44

TillebecktillebeckTillebeck

3,4837 Huy hiệu vàng42 Huy hiệu bạc62 Huy hiệu Đồng7 gold badges42 silver badges62 bronze badges

7

Không phải là giải pháp đẹp nhất, nhưng nó hoạt động:

select
   UID
from
   YOUR_TABLE
where
   find_in_set['3', cast[NUMBERS as char]] > 0
   and
   find_in_set['15', cast[NUMBERS as char]] > 0

Lưu ý rằng đó là so sánh chuỗi, vì vậy bạn cũng có thể cần chuyển các tham số đầu vào của mình vào char.string comparison, so you may need to cast your input parameters to char as well.

Đã trả lời ngày 20 tháng 4 năm 2010 lúc 10:17Apr 20, 2010 at 10:17

BjornbjörnBjörn

28.7K9 Huy hiệu vàng64 Huy hiệu bạc81 Huy hiệu Đồng9 gold badges64 silver badges81 bronze badges

3

Bạn có thể thử như sau:

 SELECT * FROM table_name WHERE FIND_IN_SET['3', NUMBERS] AND  FIND_IN_SET['15', NUMBERS]

Đã trả lời ngày 31 tháng 1 năm 2013 lúc 10:07Jan 31, 2013 at 10:07

Cũng kiểm tra xem điều này có hữu ích cho bất kỳ ai không

Một chức năng mở rộng Để loại bỏ giới hạn của

SELECT * FROM table WHERE 3 IN [NUMBERS] AND 15 IN [NUMBERS]
0 bản địa trong MySQL, phiên bản mở rộng mới này
SELECT * FROM table WHERE 3 IN [NUMBERS] AND 15 IN [NUMBERS]
1 này cung cấp tính năng để so sánh một danh sách với danh sách khác.

i.e.

mysql> SELECT FIND_IN_SET_X['x,c','a,b,c,d']; -> 3 

Kiểm tra liên kết này để biết thêm chi tiết.

Saty

22.3k7 Huy hiệu vàng30 Huy hiệu bạc 50 Huy hiệu Đồng7 gold badges30 silver badges50 bronze badges

Đã trả lời ngày 23 tháng 9 năm 2010 lúc 5:29Sep 23, 2010 at 5:29

NileshnileshNilesh

Huy hiệu đồng 1131 Bạc2 Huy hiệu đồng1 silver badge2 bronze badges

3

Chức năng hoàn thành cho bạn

DELIMITER $$

CREATE FUNCTION `FIND_IN_SET_X`[inputList TEXT,targetList TEXT] RETURNS INT[11]
    DETERMINISTIC
BEGIN
  DECLARE limitCount INT DEFAULT 0 ;
  DECLARE counter INT DEFAULT 0 ;
  DECLARE res INT DEFAULT 0 ;
  DECLARE temp TEXT ;
  SET limitCount = 1 + LENGTH[inputList] - LENGTH[REPLACE[inputList, ',', '']] ;
  simple_loop :
  LOOP
    SET counter = counter + 1 ;
    SET temp = SUBSTRING_INDEX[SUBSTRING_INDEX[inputList, ',', counter],',',- 1] ;
    SET res = FIND_IN_SET[temp, targetList] ;
    IF res > 0 
    THEN LEAVE simple_loop ;
    END IF ;
    IF counter = limitCount 
    THEN LEAVE simple_loop ;
    END IF ;
  END LOOP simple_loop ;
  RETURN res ;
END$$

DELIMITER ;

Đã trả lời ngày 21 tháng 4 năm 2016 lúc 16:34Apr 21, 2016 at 16:34

find_in_set_x

Tạo một chức năng mới trong mysql và dán theo cách sau [không phải công việc của tôi bằng cách này]

BEGIN
DECLARE limitCount INT DEFAULT 0;
DECLARE counter INT DEFAULT 0;
DECLARE res INT DEFAULT 0;
DECLARE temp TEXT;
SET limitCount = 1 + LENGTH[inputList] - LENGTH[REPLACE[inputList, ',','']];
simple_loop:LOOP
SET counter = counter + 1;
SET temp = SUBSTRING_INDEX[SUBSTRING_INDEX[inputList,',',counter],',',-1];
SET res = FIND_IN_SET[temp,targetList];
IF res > 0 THEN LEAVE simple_loop; END IF;
IF counter = limitCount THEN LEAVE simple_loop; END IF;
END LOOP simple_loop;
RETURN res;
END

Đã trả lời ngày 17 tháng 7 năm 2015 lúc 14:47Jul 17, 2015 at 14:47

Hãy thử truy vấn này:

SELECT UID FROM table WHERE NUMBERS REGEXP "[[::]]"

SELECT * FROM table WHERE 3 IN [NUMBERS] AND 15 IN [NUMBERS]
2 Các điểm đánh dấu này đại diện cho các ranh giới từ, và như vậy, chúng khớp với phần đầu và kết thúc của các từ, tương ứng.

Mickmackusa

40.3k11 Huy hiệu vàng80 Huy hiệu bạc121 Huy hiệu đồng11 gold badges80 silver badges121 bronze badges

Đã trả lời ngày 9 tháng 4 năm 2019 lúc 11:10Apr 9, 2019 at 11:10

0

Hãy thử những điều sau:

SELECT UID
FROM TABLE
WHERE
concat[",",NUMBERS,","] like "%,1,%" 
OR
concat[",",NUMBERS,","] like "%,15,%";

Đã trả lời ngày 8 tháng 4 lúc 20:39Apr 8 at 20:39

HarryharryHarry

1492 Huy hiệu bạc8 Huy hiệu đồng2 silver badges8 bronze badges

Làm thế nào để tìm nạp dấu phẩy tách các giá trị trong SQL?

Làm cách nào để có được các giá trị phân tách bằng dấu phẩy trong SQL Server? Để tìm nạp các giá trị dấu phẩy [phân định] khỏi quy trình được lưu trữ, bạn cần sử dụng một biến với kiểu dữ liệu và kích thước giống như tham số đầu ra và truyền nó làm tham số đầu ra bằng cách sử dụng từ khóa đầu ra.make use of a variable with data type and size same as the Output parameter and pass it as Output parameter using OUTPUT keyword.

Làm thế nào tôi có thể nhận được nhiều dữ liệu hàng trong chuỗi phân tách bằng dấu phẩy trong SQL?

Câu trả lời của bạn..
Dữ liệu kiểm tra khai báo @Bảng1 Bảng [ID int, giá trị int] chèn vào các giá trị @Bảng1 [1.100], [1.200], [1.300], [1.400].
Truy vấn chọn id, công cụ [[chọn ',' + cast [value as varchar [10]] [text []] từ @Bảng1 trong đó id = t.id cho đường dẫn xml [''], loại] .value ['.','.

Chúng ta có thể lưu trữ các giá trị phân tách dấu phẩy trong MySQL không?

Bạn không bao giờ lưu trữ các mảng phân tách dấu phẩy trong cơ sở dữ liệu - mỗi mục trong mảng phân tách dấu phẩy cần được lưu trữ trong hàng riêng của nó trong một bảng trong cơ sở dữ liệu.Bảng này sẽ có nhiều mối quan hệ với bảng ban đầu. - each entry in the comma separated array needs to be stored in its own row in a table in the database. This table would have a many to one relationship to the original table.

Trường hợp điều kiện trên dấu phẩy phân tách giá trị MySQL?

Để thực hiện mệnh đề WHERE trên chuỗi/giá trị được phân tách bằng dấu phẩy, MySQL có hàm sẵn có tên là Find_in_set sẽ tìm kiếm các giá trị trong các giá trị được phân tách bằng dấu phẩy.Bạn cũng có thể sử dụng trong toán tử để đạt được điều tương tự nhưng có một số hạn chế với trong nhà điều hành mà tôi sẽ hiển thị bên dưới.MySQL has an inbuilt function called FIND_IN_SET which will search for values within a comma separated values. You can also use IN operator to achieve the same but there are some limitations with IN operator which I will show below.

Bài Viết Liên Quan

Chủ Đề