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

标签 mysql sql datetime stored-procedures

我将日期作为逗号分隔值传递,例如。 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/

相关文章:

c# - 将 datetime2 数据类型转换为 datetime 数据类型会导致值超出范围

PHP 选择日期等于日期时间的位置

mysql - 来自 mysql 的 JavaFx 组合框

mysql - 从 csv 文件导入日期作为 MySQL 数据库中的 DATE 格式

java - 获取 SQL 查询响应中每个重复记录的计数

mysql - 为什么 MATCH AGAINST 返回的结果与 LIKE 不同?

mysql - 原子更新插入 MySQL

mysql root权限更新information_schema错误

mysql - 从使用相同联接的多个表中进行选择

sql - 查找日期列时间戳 = 00 :00:00. 000 的所有行