SELECT * from Results
WHERE DATEDIFF(d,Date,getdate())<30
しかし、これにはエラーがあるようです。
提出された各レコードには30日しか表示されません。私の構文が正しいかどうか分かりますか?
非常に高く評価された、 スタン
SELECT * from Results
WHERE DATEDIFF(d,Date,getdate())<30
しかし、これにはエラーがあるようです。
提出された各レコードには30日しか表示されません。私の構文が正しいかどうか分かりますか?
非常に高く評価された、 スタン
あなたのクエリが音を探します。あなたが走っているエラーは何ですか?
接続に失敗しました。 未定義関数 'getdate' –
構文はOKに見えますが、あなたは「引用」Date
に必要になる場合があります。
SELECT * from Results WHERE DATEDIFF(d, [Date], getdate()) < 30
あなたは結果の日付という列を持っていますか?
ところで、この意志のに対し、インデックスを使用することはできません。
SELECT * from Results WHERE [Date] >= DATEADD(d, -30, getdate())
はい。私は日付という名前のcloumnを持っています。 10億に感謝します。 –
アップは、インデックスヒントに投票しました。 Thx – AngryHacker
質問の最適化のための+1 –
は、Microsoft Accessデータベースを使用している場合は、現在の日付を取得するための関数は(日です)getdate()
ではなく、SQL Server用です。
SELECT *
FROM results
WHERE ([Date] between DateAdd("d", -30, Date()) and Date())
もう一つのヘッドアップ:
はこれを試してみてください。 Accessのフィールド「日付」の命名は一般的には悪い考えです。これは予約語なので、すべてのクエリで括弧[]を使用する必要があります。
ああ、私は追加する義務があります。 「SELECT *」をしないで、必要な特定のフィールドを一覧表示します。私の反応の構文は、あなたが必要とするフィールドがわからないので、一例にすぎません。 – JohnFx
データベースとしてSQL Serverを指定していません。 Accessでは、DateAddの構文は次のとおりです。DateAdd( "d"、1、 "31-Jan-95")。
厳密に言えば、* Jet *では構文があります。 AccessにはSQL構文がありません.Jet SQL構文しかありません。 –
「厳密に」?いいえ、「Jet」と「Microsoft Access Engine」を意味するために「Jet」という用語を使用しています。 「Access」という言葉が厳密な定義の中に含まれていると考えると、「Access SQL」を口頭で言及することは完全に容認され、誰もが何を意味するのかを知ることができます。 – onedaywhen
多くの人がそれをしています。しかし、データベースエンジン(Jet)と開発プラットフォーム(Access)を区別していない多くの人々の議論と心の両方において、ひどく混乱しています。 –
まず、あなたと(このスレッドの回答のほとんどは)SQLバリアントを混ぜています。あなたはSQL Serverについて質問はしていませんが、SQL Serverの構文(GetDate())の使用に関する推奨を得ています。
JohnFxからの答えはあなたに正しいジェットSQL構文提供:
SELECT *
FROM results
WHERE ([Date] between DateAdd("d", -30, Date()) and Date())
をしかし、彼はフィールド「日付」を命名するアクセス/ジェットには本当に悪いことも正しいです。 WHERE句はで改善されることがあります。
WHERE (results.Date between DateAdd("d", -30, Date()) and Date())
が、私は確かに言うことはできません - 私はこの種の問題に遭遇することはないフィールド「日付」という名前を付けたことがないでしょう。
しかし、整数部分が日付と小数部分を示す形式でJetに日付を格納すると、より単純なバージョンが存在することがあります。日付(週または月または四半期ではなく)を扱うときにそのことを、あなたは直接それらに日付の計算を実行することができますので:
WHERE results.Date BETWEEN results.Date-30 AND Date()
これはあなたJohnFxのDateDiff関数()バージョンとまったく同じ結果が得られます、各行に対してDateAdd関数を呼び出す必要はありません。
重要なことは、Jetデータベースの正しい構文を使用していることです。つまり、DateAdd()の最初の引数は文字列値( "d")であり、SQL Server関数(GetDate ())、代わりに同じ目的(Date())のためにJetの関数を使用する必要があります。しかし、あなたがする必要がないときにSQLでJet/Access関数を使用することを避けることも良い考えです。そのため、 "results.Date-30"バージョンがDateAdd()バージョンより優れていると思うのはなぜですか。
その他:SQLを含む回答を投稿する人は、質問者がSQLを実行するために使用しているデータベースエンジンに細心の注意を払ってください。これらのポスターは慎重に質問を読んでいないので、間違った答えがたくさん見つかっています(どのデータベースエンジンが関連しているかはキーワードからはっきりと分かりました)。
私は最初の質問でタグを見逃していました。これは私に異なる構文を提供してしまいました。それは、それがJet SQLの構文であることを知ってくれるキーワードを教えてくれましたか? – ahsteele
こんにちはDavid、洞察と明確化のおかげで。私は、すべてのアドバイザーに混乱を避けるために、より明確な質問をするべきだった。 私はSQL Server関数ではなくJets SQLに従ってコードの名前を変更し、修正しました。 今すぐ使えます!非常に感謝しています。 =) –
"より良い"というのは、見る人の目の前です。私は時間的顆粒 "d" =日がより明示的であるため、目の上にDateAddバージョンの親切を見つける。 – onedaywhen
エラーが発生していますか、または正しい値を取得していませんか? – johnc
どのRDMSを使用していますか? – ahsteele
私はMicrosoft Frontpageを使用しています。 –