2

SQL サーバー DB テーブルからレコードをフェッチする ASP ページがあります。テーブル「order_master」には、order_date というフィールドがあります。注文日 > ユーザーが入力した日付 (例: 07/01/2008) を取得するための選択クエリを作成したい

convert と cast を試しましたが、どちらも機能しません。order_date 列のサンプル データは 4/10/2008 8:27:41 PM です。実際、それがどのタイプ(varchar/datetime)なのかわかりません。

それを行う方法はありますか?

4

6 に答える 6

1

最初に SQL データ型が DateTime または SmallDateTime であることを確認してから、ページから Date/DateTime 値を渡していることを確認します。

それらが両方とも正しい場合は、ジョエルのアドバイスに従い、比較を試みる前に両方の値を明示的に日付に変換する方がよいでしょう。また、見ている時間値の精度を確認してください。当たり前のように思えますが、1/1/2008 12:00:00.001 AM は 1/1/2008 12:00:00.000 AM と等しくありません。はい、私は経験から話しています。:P

于 2008-10-15T19:11:20.280 に答える
1

2008 年 7 月 1 日という日付はイギリス/フランスの注釈なので、次のことを行う必要があります。

SELECT myColumn FROM myTable WHERE myDateField >= convert(datetime, '07/01/2008 00:00:00', 103)

このコードは、00:00:00 (hh:mm:ss) 以降、myDateField の日付が 2008 年 1 月 7 日であるすべての行を取得します。つまり、その日の最初の 1 秒、つまり 1 日全体です。

詳細については、MSDN の Books online を参照してください

于 2008-10-15T19:12:27.233 に答える
0

日付を比較する場合、4/10/2008 8:27:41 PM は 4/10/2008と等しくないことに注意してください。SQL Server は 4/10/2008 を 4/10/2008 12:00:00 AM と解釈し、秒まで正確に比較します。したがって、2008 年 4 月 10 日は、2008 年 4 月 10 日 8:27:41 PM 未満です。

于 2008-10-15T19:24:40.627 に答える
0

このようなストアドプロシージャを作成できます

CREATE PROCEDURE GetOrders
    @OrderDate DATETIME
AS
SELECT
    *
FROM order_master
WHERE Order_Date > @OrderDate

GO

次に、ASP コードを介してストアド プロシージャを呼び出す前に、ユーザー入力を日付に変換するだけです。

編集

列タイプに関するコメントに気付きました。このコマンドを実行できます

sp_help order_master

order_date のデータ型を見つけるための列情報を取得します。

于 2008-10-15T19:02:32.370 に答える
0

両方の値を日時型にCONVERT() しようとしましたか?

于 2008-10-15T19:04:29.857 に答える
0

フィールドタイプがわからないと言います。それが最初に解決すべき問題です。あなたはそれを行うことができます: -

SELECT DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Order_Master' AND
    COLUMN_NAME = 'Order_Date'

変換する必要がある日時型の 1 つでない場合は、それがあなたの責任でない場合は、責任を持っている人に相談してください。

日付の「形式」に関心があるという事実は、連結を使用して SQL を構築している可能性があることを示しています。もしそうなら、それをやめてください。パラメーターを指定してコマンドを使用し、日付を日付型として渡します。

あなたの問題は、クライアント側で日付を入力する方法と、ASP コードで日付として解析できる明確な形式にする方法の 1 つです。

それがあなたが解決したものでない場合は、この回答にコメントを追加してください。この回答を展開します。

于 2008-10-16T09:10:43.440 に答える