1

計算に基づいて年齢を返す mysql 内のプロシージャを実装しようとしています。生年月日 (DATE) が渡され、計算が行われます。比較的簡単なはずですが、うまくいかないようです。これが「選択ステートメント」に適切な状況であるかどうかはわかりません。これが非常に単純である場合は申し訳ありませんが、これはプロシージャでの最初の実行です。

誰かが私が間違っていることを教えていただければ幸いです。

ありがとう!

PS私は、ストアドプロシージャが呼び出されるまで現在空であるフィールド「age」(int)を含む「PERSON」というテーブルを持っています。

DELIMITER $$
CREATE PROCEDURE determineAge(IN birthDate DATE)
BEGIN
DECLARE today TIMESTAMP; 
SELECT DATEDIFF(today,birthdate)/365 AS ageInYears
FROM PERSON;
END $$
DELIMITER ;

call determineAge('June 25, 1981');
4

1 に答える 1

2

これは機能します。「今日」を宣言する必要はありませんNOW()。クエリで関数を使用するだけです。

また、FROM何も選択する必要はありません...単一の値を照会するだけです。

日付の形式が間違っていました (MySQL では が必要'YYYY-MM-DD'で、整数の年数を取得するために差を床に落としたいと考えています。

DELIMITER $$
CREATE PROCEDURE determineAge(IN birthDate DATE)
BEGIN
    SELECT FLOOR(DATEDIFF(NOW(), DATE(birthdate))/365);
END $$
DELIMITER ;

CALL determineAge('1981-06-25');

最後に、必要に応じて、理論的には年の値をパラメーターとして返すこともできますOUTが、クエリの結果は問題ありません。

DELIMITER $$
CREATE PROCEDURE determineAge(IN birthDate DATE, OUT age INT)
BEGIN
    SELECT FLOOR(DATEDIFF(NOW(), DATE(birthdate))/365) INTO age;
END $$
DELIMITER ;

ほら!

于 2012-12-05T01:34:05.773 に答える