gpt4 book ai didi

mysql - 在 Mysql 过程中传递多个日期

转载 作者:行者123 更新时间:2023-11-29 00:24:32 26 4
gpt4 key购买 nike

我将日期作为逗号分隔值传递,例如。 param1 = 2012-01-12,2013-02-15,2012-12-01,这将输入到我的程序中,我如何才能获取作为参数传递给我的程序的所有日期的值。

我试过使用:select value from table1 where date_value in (param1);但它给了我一个空集。

请告诉我如何解决。

更新:

DELIMITER $$
CREATE FUNCTION test2(dates text)
RETURNS text READS SQL DATA
BEGIN
DECLARE abc text;
DECLARE hi text;

SET hi= concat('''',regex_replace('[,]',''',''',dates),'''');

select value into abc from table1 where date_time in (hi);

RETURN abc;
END;
$$
DELIMITER ;

我对该函数的输入将是多个日期:例如:2010-12-12,2012-12-10,.....

我的 regex_replace 函数将以这种格式返回日期:'2010-12-12','2012-12-10' 并将其设置为一个变量并传递给它。

但我总是得到一个空集。我哪里出错了?

最佳答案

您在示例中尝试做的是即时构建 SQL。这需要使用 prepared statement 来完成.但是,准备好的语句不能在函数中使用,如果有人可以操纵“日期”变量,它们也会带来安全风险。

相反,我建议拆分日期变量并将各部分插入到临时表中,然后对此进行查询。我在下面做了一个简单的例子:

DROP FUNCTION IF EXISTS checkCommaList;
DELIMITER #
CREATE FUNCTION checkCommaList(dates text)
RETURNS text
BEGIN

DECLARE abc text;

DROP TEMPORARY TABLE IF EXISTS checkCommaListTemp;
CREATE TEMPORARY TABLE checkCommaListTemp(textToSearch text);

WHILE (LOCATE(',',dates) > 0)
DO
SET @found = SUBSTRING(dates, 1, LOCATE(',', dates) - 1 );
SET dates = SUBSTRING(dates, LOCATE(',', dates) + 1);
INSERT INTO checkCommaListTemp VALUES (@found);
END WHILE;

SELECT `value` INTO abc FROM table1
WHERE date_time IN (SELECT * FROM checkCommaListTemp);

DROP TEMPORARY TABLE checkCommaListTemp ;

RETURN abc;

END;
#
DELIMITER ;

DROP TABLE IF EXISTS table1;
CREATE TABLE table1 (`value` text, date_time text);
INSERT INTO table1 (`value`, date_time) VALUES ('a', '2010-12-12');

SELECT checkCommaList('2010-12-12,2012-12-10');

但是,可能有更有效的方法来实现您想要的。

关于mysql - 在 Mysql 过程中传递多个日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19560488/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com