0

次のような手順を書きたいと思います。

CREATE PROCEDURE `addByType`(IN myDate DATETIME, IN myType INT, OUT output DATETIME)
BEGIN
DECLARE unit ?;
CASE  
    WHEN myType = 1 THEN 
        SET unit = HOUR;        
    WHEN myType = 2 THEN
        SET unit = DAY;
    ...
END CASE;
SELECT TIMESTAMPADD(unit, 1, myDate) INTO output;
END

なんとなく可能ですか?unit キーワードを変数に格納できますか? または、同じことを達成する別の方法はありますか?

4

1 に答える 1

1

これを試してみてください:

CREATE PROCEDURE `addByType`(IN myDate DATETIME, IN myType INT, OUT output DATETIME)
BEGIN

CASE  
    WHEN myType = 1 THEN 
        SET @unit = 'HOUR';        
    WHEN myType = 2 THEN
        SET @unit = 'DAY';
END CASE;

SET @sql = CONCAT('SELECT TIMESTAMPADD(', @unit, ', 1, \'', myDate, '\') INTO @output;');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET output = @output;

END

構文エラーが含まれる場合があり、特定のものを検索する必要があります。しかし、私はあなたがそれを理解できると確信しています。今行かなくては、明日また見ていきます。

PS:これがプリペアドステートメントの手動エントリです

于 2013-02-27T17:28:23.823 に答える