今日仕事で問題が発生し、時間を基準にクエリを実行する必要がありましたが、クエリの結果が正しくありませんでした。たとえば、2007 年 10 月 12 日から 2007 年 10 月 31 日までに Web サイトに登録したメンバーを検索するには、日付を選択した後、「クエリ」ボタンをクリックして、2007 年 10 月 31 日に登録したメンバーを検索します。情報はまったく表示されず、数回テストしても結果は同じでした。デバッガーは、SQL ステートメントに問題があることを検出しました。
SQL ステートメントは次のとおりです: SELECT * FROM userinfo WHERE regtime >= '2007-10-12' AND regtime <= '2007-10-31'。一見、この SQL ステートメントにはエラーがないように見えますが、データベース内の対応するフィールドに保存された値を比較した後、保存された値は単純な形式ではないことがわかります。日付ですが、日付 + 時刻の形式、つまり yyyy-MM-dd HH:mm :ss の場合、SQL ステートメントで regtime と '2007-10-31' のサイズが決定されると、'2007- 10-31' は不完全に記述されているため、2 つの値は等しいとはみなされません。何をするか?
心配しないでください。ASP には、この問題の解決に役立つ日付の加算および減算関数が用意されています。
1. 日付加算
DateAdd 関数は、指定された時間間隔を加算した日付を返します。
DateAdd(間隔, 数値, 日付)
DateAdd 関数の構文には次のパラメータがあります (1) 間隔は必須です。追加する時間間隔を表す文字列式。値については、「設定」セクションを参照してください。
(2)番号は必須です。追加する時間間隔の数を示す数値式。数値式には、正の値 (将来の日付を取得する) または負の値 (過去の日付を取得する) を指定できます。
(3) 日付は必須です。間隔を追加する日付を表すバリアントまたはテキスト。
説明 DateAdd 関数を使用すると、指定した時間間隔を日付に加算または減算できます。たとえば、DateAdd を使用して、今日から 30 日後の日付、または今から 45 分後の時刻を計算できます。日付に時間間隔を「日」単位で追加するには、「年間日数」(「y」)、「日」(「d」)、または「曜日」(「w」) を使用できます。
DateAdd 関数は無効な日付を返しません。次の例では、1995 年 1 月 31 日に 1 か月を追加します。
NewDate = DateAdd("m", 1, "31-Jan-95")
この例では、DateAdd は 1995 年 2 月 31 日ではなく、1995 年 2 月 28 日を返します。日付が 1996 年 1 月 31 日の場合、1996 年はうるう年であるため、1996 年 2 月 29 日が返されます。
計算された日付が西暦 100 年より前の場合、エラーが発生します。
数値が Long 値でない場合は、計算前に最も近い整数に丸められます。
2. 日付減算 DateDiff 関数は、2 つの日付の間の時間間隔を返します。
DateDiff(interval, date1, date2 [,firstdayofweek[, firstweekofyear]])
DateDiff 関数の構文には次のパラメーターがあります。
(1) 間隔が必要です。 date1 と date2 の間の時間間隔を計算するために使用される文字列式。値については、「設定」セクションを参照してください。
(2) date1、date2 は必須です。日付式。計算に使用される 2 つの日付。
(3) 週の最初の日はオプションです。週の最初の曜日を指定する定数。指定しない場合、デフォルトで日曜日が設定されます。値については、「設定」セクションを参照してください。
(4) 年の最初の週はオプションです。年の最初の週を指定する定数。指定しない場合、デフォルトで 1 月 1 日の週が設定されます。値については、「設定」セクションを参照してください。
説明 DateDiff 関数は、2 つの日付の間に存在する指定された時間間隔の数を決定するために使用されます。たとえば、DateDiff を使用して、2 つの日付の間の日数、または今日と年の最後の日の間の週数を計算できます。
date1 と date2 の間の日数を計算するには、「年間日数」(「y」) または「日数」(「d」) を使用できます。間隔が「曜日」(「w」) の場合、DateDiff は 2 つの日付の間の週数を返します。 date1 が月曜日の場合、DateDiff は date2 までの月曜日の数をカウントします。この結果には date2 が含まれますが、date1 は含まれません。間隔が「週」(「ww」) の場合、DateDiff 関数はカレンダー テーブル内の 2 つの日付の間の週数を返します。この関数は、date1 と date2 の間の日曜日の数をカウントします。 DateDiff は、date2 が日曜日の場合は date2 を評価しますが、date1 が日曜日の場合でも date1 は評価しません。
date1 が date2 より後の場合、DateDiff 関数は負の数を返します。
firstdayofweek 引数は、「w」および「ww」区切り記号を使用した計算に影響します。
date1 または date2 が日付リテラルの場合、指定された年は日付の固定部分になります。ただし、date1 または date2 を引用符 (" ") で囲み、年を省略した場合、コード内で date1 または date2 式が評価されるたびに現在の年が挿入されます。これにより、異なる年にわたって機能するプログラム コードを作成することが可能になります。
間隔が「年」(「yyyy」) の場合、12 月 31 日と翌年の 1 月 1 日を比較します。実際にはその差は 1 日だけですが、DateDiff は 1 年の差を示す 1 を返します。