今日仕事で問題が発生し、時間を基準にクエリを実行する必要がありましたが、クエリの結果が正しくありませんでした。例えば、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) 日付は必須です。間隔を追加する日付を表すバリアントまたはテキスト。
設定
間隔パラメータには次の値を指定できます。
設定の説明
yyyy年
第四半期
m月
y 一年の日数
日
w 曜日
ww週間
時間
n分
秒
説明する
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(間隔, 日付1, 日付2 [, 週の最初の日[, 年の最初の週]])
DateDiff 関数の構文には次のパラメーターがあります。
(1) 間隔が必要です。 date1 と date2 の間の時間間隔を計算するために使用される文字列式。数値については「設定」セクションを参照してください。
(2) date1、date2 は必須です。日付式。計算に使用される 2 つの日付。
(3) 週の最初の日はオプションです。週の最初の曜日を指定する定数。指定しない場合は、デフォルトで日曜日が設定されます。数値については「設定」セクションを参照してください。
(4) 年の最初の週はオプションです。年の最初の週を指定する定数。指定しない場合、デフォルトで 1 月 1 日の週が設定されます。数値については「設定」セクションを参照してください。
設定
間隔パラメータには次の値を指定できます。
設定の説明
yyyy年
第四半期
m月
y 一年の日数
日
w 曜日
ww週間
時間
n分
秒
firstdayofweek パラメータには次の値を指定できます。
定数値の説明
vbUseSystem 0 National Language Support (NLS) API 設定を使用します。
vbSunday 1 日曜日 (デフォルト)
vb月曜日 2 月曜日
vb火曜日 3 火曜日
vb水曜日 4 水曜日
vb木曜日 5 木曜日
vb金曜日 6 金曜日
vb土曜日 7 土曜日
firstweekofyear パラメータには次の値を指定できます。
定数値の説明
vbUseSystem 0 National Language Support (NLS) API 設定を使用します。
vbFirstJan1 1 1 月 1 日の週から始まります (デフォルト)。
vbFirstFourDays 2 は、少なくとも 4 日ある新年の最初の週から始まります。
vbFirstFullWeek 3 は、新年の最初の丸一週間から始まります。
説明する
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 を返します。