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