在mysql中调用存储过程时出错

时间:2015-10-25 10:43:15

标签: mysql stored-procedures

我已创建了一个存储过程,用于将给定月份和年份中的所有日期填充到表格“month_date”中。 (日期栏)

  -- --------------------------------------------------------------------------------
  -- Routine DDL
  -- Note: comments before and after the routine body will not be stored by the server
  -- --------------------------------------------------------------------------------
  DELIMITER $$

  CREATE DEFINER="root"@"localhost" PROCEDURE "populate_date"(IN p_month varchar(3),
                                                              IN p_year varchar(4))
    MODIFIES SQL DATA
    DETERMINISTIC
  BEGIN
  declare l_month varchar(9);
  set l_month =  '01'+p_month+p_year;

  insert into month_date
  SELECT date_field
  FROM
  (
      SELECT
          STR_TO_DATE(l_month, '%d%b%Y')+
          INTERVAL daynum DAY date_field
      FROM
      (
          SELECT t*10+u daynum
          FROM
              (SELECT 0 t UNION SELECT 1 UNION SELECT 2 UNION SELECT 3) A,
              (SELECT 0 u UNION SELECT 1 UNION SELECT 2 UNION SELECT 3
              UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7
              UNION SELECT 8 UNION SELECT 9) B
          ORDER BY daynum
      ) AA
  ) AAA
  WHERE MONTH(date_field) = MONTH(STR_TO_DATE(l_month, '%d%b%Y'));

  commit;


  END

当我调用此程序时

   call sms.populate_date('Sep','2015');

抛出错误

 Incorrect datetime value: '2016' for function str_to_date

我自己运行sql并且工作正常。

    SELECT date_field
    FROM
    (
        SELECT
            STR_TO_DATE('01Sep2015', '%d%b%Y')+
            INTERVAL daynum DAY date_field
        FROM
        (
            SELECT t*10+u daynum
            FROM
                (SELECT 0 t UNION SELECT 1 UNION SELECT 2 UNION SELECT 3) A,
                (SELECT 0 u UNION SELECT 1 UNION SELECT 2 UNION SELECT 3
                UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7
                UNION SELECT 8 UNION SELECT 9) B
            ORDER BY daynum
        ) AA
    ) AAA
    WHERE MONTH(date_field) = MONTH(STR_TO_DATE('01Sep2015', '%d%b%Y'));

请帮助您解决此错误吗?

感谢

1 个答案:

答案 0 :(得分:0)

您需要将字符串与CONCAT() - 函数结合使用。 +仅用于添加:

....
 BEGIN
  declare l_month varchar(9);

  /*ADDED CONCAT HERE*/
  set l_month =  CONCAT('01',p_month,p_year);

  insert into month_date
  SELECT date_field
  FROM
  (

....
相关问题