稼働日数 (月曜日から金曜日) と開始 DATE または DATETIME (実装には関係ありません) を渡して、稼働日数分の新しい DATE または DATETIME を返すことができる MySQL 関数が必要です。将来。
例: SELECT AddWorkDays(10, "2013-09-01")
「2013-09-01」が月曜日であると仮定して、「2013-09-16」を返します。
同様に、 SELECT AddWorkDays(-10, "2013-09-16")
「2013-09-01」を返します
MySQL にないことを除けば、まさに私が必要としている MSSQL データベース (私が思うに) 用のこの関数を見つけました。私はそれを手動でMySQL構文に変換しようとしましたが、ここまで来ました:
DROP FUNCTION IF EXISTS AddWorkDays;
DELIMITER $$
CREATE FUNCTION AddWorkDays
(
WorkingDays INT,
StartDate DATE
)
RETURNS DATE
BEGIN
DECLARE Count INT;
DECLARE i INT;
DECLARE NewDate DATE;
SET Count = 0;
SET i = 0;
WHILE (i < WorkingDays) DO
BEGIN
SET Count = Count + 1;
SET i = i + 1;
WHILE DAYOFWEEK(ADDDATE(StartDate, Count)) IN (1,7) DO
BEGIN
SET Count = Count + 1;
END;
END WHILE;
END;
END WHILE;
SET NewDate = ADDDATE(StartDate, Count);
RETURN NewDate;
END;
$$
DELIMITER ;
エラーが発生します:
Error 1415: Not allowed to return a result set from a function
結果セットを返そうとしているところが正確にわからないようです。
構文にエラーはありますか? より良い解決策はありますか?
ありがとう!
編集
MySQL には DATEPART または DATEADD 関数がないようです。ドキュメントには、ADDDATE と DAYOFWEEK があることがわかります。これを表すようにコードを更新しました。また、SELECTステートメントをSETに変更しました(元のエラーが発生した理由がわかりました)
その結果、CF 経由で関数を使用してクエリを実行しようとすると、新しいエラーが発生します。
[Table (rows 1 columns ADDWORKDAYS(10,"2013-09-01")): [ADDWORKDAYS(10,"2013-09-01"): coldfusion.sql.QueryColumn@7a010] ] is not indexable by ADDWORKDAYS(10