我在sql server中创建了类似http://ole.michelsen.dk/blog/split-string-to-table-using-transact-sql.html的函数,我发送了csv字符串 " 1,2,3,4,5"它就像桌子一样。可以在mysql中有类似的东西
我必须通过" 1,2,3,4,5" as Text或varchar(1000)
Select Id from CSVToTable(merchantsIds)
where id not in
(
SELECT DISTINCT merchantid
FROM `transaction`
WHERE `statusid` =_status
)
记住我的商品字段属于int类型
答案 0 :(得分:1)
试试这个存储过程...
创建此sproc后,您可以像这样调用它
致电split_tags_into_rows(' ram,shyam,mohan,1,2012-01-03',','); 强>
-- STORED PROCEDURES
DROP PROCEDURE IF EXISTS split_tags_into_rows;
DELIMITER #
CREATE PROCEDURE split_tags_into_rows(IN _in_tags_to_be_seperated VARCHAR(8000), IN _in_seperator CHAR(3))
proc_main:BEGIN -- 1. Begin Proc
DECLARE v_keyword VARCHAR(255);
DECLARE v_keyword_id MEDIUMINT UNSIGNED;
-- Iteration variable (v_tags_done: if done through each and every work of input string paramter,
-- v_tags_idx: currently running id )
DECLARE v_tags_done TINYINT UNSIGNED;
DECLARE v_tags_idx INT UNSIGNED;
-- Temporary Table Declaration & initialization (as DB doesn't support array, we've to split the incoming tag based and put each and
-- every "tag" into temporary table, MAKE SURE TO DROP IT BEFORE LEAVING THE PROC)
-- drop temporary table
DROP TEMPORARY TABLE IF EXISTS temp_token_to_delete;
-- create temporary table
CREATE TEMPORARY TABLE temp_token_to_delete (Id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, Word VARCHAR(256));
--
SET autocommit = 0;
-- split the out the _in_tags_to_be_seperated and insert into temporary table
SET v_tags_done = 0;
SET v_tags_idx = 1;
WHILE NOT v_tags_done DO -- 1.BEGIN WHILE
-- get the word from "," to ","
SET v_keyword = SUBSTRING(_in_tags_to_be_seperated, v_tags_idx,
IF(LOCATE(_in_seperator, _in_tags_to_be_seperated, v_tags_idx) > 0,
LOCATE(_in_seperator, _in_tags_to_be_seperated, v_tags_idx) - v_tags_idx,
LENGTH(_in_tags_to_be_seperated))
);
IF LENGTH(v_keyword) > 0 THEN
SET v_tags_idx = v_tags_idx + LENGTH(v_keyword) + 1;
SET v_keyword = TRIM(v_keyword);
-- add the keyword into temporary table
INSERT IGNORE INTO temp_token_to_delete (Word) VALUES (v_keyword);
ELSE
SET v_tags_done = 1;
END IF;
END WHILE; -- 1.END WHILE
COMMIT;
-- Select records
SELECT Id, Word FROM temp_token_to_delete;
-- Clean your DB: drop temporary table (it should be last statement
-- , if you want to use the data of temporary table in between the proc)
DROP TEMPORARY TABLE IF EXISTS temp_token_to_delete;
END proc_main # -- -- 1. End Proc