2015-10-25 68 views
0

我創建了一個存儲過程來填充所有日期在特定月份&年到表「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 

當我打電話這在MySQL存儲過程時程序

其投擲的錯誤

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')); 

請幫助你解決這個錯誤嗎?

感謝

回答

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 
    (

....