質問

MySQLにストアド関数があります:

CREATE FUNCTION `login_count`(o INT, start_date DATE, end_date DATE) RETURNS INT
READS SQL DATA
BEGIN
DECLARE total_count INT;
SELECT COUNT(*) INTO total_count FROM logins as l WHERE `order_id` = o && modified BETWEEN start_date AND end_date; 
RETURN total_count; 
END

Prettybasic。ID、開始日、終了日を受け取り、その日付範囲のログイン数を返します。実行するたびに0が返されます。 where句の日付セクションを削除しない限り。次に、実際の数値を返します。または、保存された関数に日付を手動で入力するだけで機能します...したがって、日付の問題ではありませんが、パラメータリストを介して日付を指定する場合のみ、それは気に入らないです。

これが起こる原因について考えていることはありますか?保存された関数に日付を手動で入れることができ、それが機能するという事実は本当にバグです。混乱する可能性のある多くのことがここで起こっているわけではないので、次に何をしようか迷っています。

また、ストアド関数/プロシージャをデバッグする方法はありますか。 0が返ってきましたが、これをデバッグして何が起きているのかを理解する方法はありますか?

役に立ちましたか?

解決

最初の推測は、MySQLが認識しない形式で日付を指定していることです。 MySQLは日付リテラルの形式についてかなりうるさいです。 YYYY-MM-DD、YY-MM-DD、YYYYMMDD、またはYYMMDDが必要です(ダッシュの代わりに他の句読文字も使用できます)。詳細については、 DATETIME、DATE、およびTIMESTAMPタイプを参照してください。 。

STR_TO_DATE()関数。

ストアドプロシージャとストアド関数のデバッグについては、常にユーザー定義変数に @ プレフィックスを設定できます。この変数は、ストアド関数が返された後にグローバルに使用可能になります。副作用のように。したがって、ストアド関数の実行中に診断情報を設定するためにこれを使用し、後でそれを確認できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top