0

私はこれを自分で解決するのにうんざりしています.SQLの日時フィールドがどのように機能するか理解できません.理解するのは本当に悪いです.2時間かかりました.

問題:

Access データベースがあり、それを SQL Server 2008 r2 テーブルに移動します (すべてインポート)。

今、私はSQLテーブルに次のような日付を持っています;

2012-04-03 00:00:00.000
2012-04-04 00:00:00.000
2012-04-05 00:00:00.000
2012-04-04 00:00:00.000
2012-04-05 00:00:00.000
2012-04-09 00:00:00.000
2012-04-09 00:00:00.000

そして、このSQLが日付でどのように機能するかは、yyyy/mm/ddまたはyyyy/dd/mmかどうかさえわかりません。

このクエリを実行すると:

Select * from Contractor_Appointments where app_date  Between '02/04/2012' and '02/04/2012' 

代わりに、2012 年 4 月 2 日からのすべての結果を返す必要があります。

2012-02-04 00:00:00.000
2012-02-04 00:00:00.000
2012-02-04 00:00:00.000
2012-02-04 00:00:00.000

データベースに新しいレコードを挿入すると、日付は次のようになります。

2012-02-04 00:00:00.000

そして、上記のクエリに表示されます:(このSQL日付処理にうんざりしているので助けてください。私のコンピューターの日付は02/04/2012に設定されています。

なにか提案を:

ありがとうございました

4

4 に答える 4

0

実行して、 yourが に設定されていて、 yourが に設定されているdbcc useroptionsかどうかを確認してくださいLanguageus_englishdateformatmdy

于 2012-04-02T21:06:17.977 に答える
0

なぜ同じフォーマットではないのですか?

Select * 
from Contractor_Appointments 
where app_date  Between '2012-02-04' and '2012-02-04'

月のどの部分かを調べるには

select datepart(MONTH,app_date)
from from Contractor_Appointments 
于 2012-04-02T21:06:58.693 に答える
0

2 つの問題があります。1 つは、SQL Server が日付を処理する方法を理解することです。上記の例では、クエリは実際には次のとおりです。

SELECT * from Contractor_Appointments where app_date  Between '02/04/2012 00:00:00' and '02/04/2012 00:00:00'

あなたは午前 0 時から午前 0 時までのすべての予約を求めていますが、2 番目の問題を除いて、それほど悪くはありません。あいまいな日時形式を使用しています。SQL Server がこの日付を解釈する方法は、さまざまな設定 (たとえば、ロケール設定やデータベースが使用している言語) によって異なります。あなたの場合、実際には 2012 年 2 月 4 日と解釈されています。これは、米国のマシンでクエリを実行していること、またはデータベース言語が日付形式が MM/dd/yyyy の地域用であることを示唆しています。

代わりに、不変の日時形式を使用してください。これは明確であり、地域設定に依存しない必要があります。不変の日時形式の例は、yyyyMMdd HH:mm:ss です。

したがって、クエリは次のようになります。

SELECT * from Contractor_Appointments where app_date  Between '20120402 00:00:00' and '20120403 00:00:00'

これにより、2012 年 4 月 2 日のすべての予定が表示されます (つまり、4 月 2 日の午前 0 時から 4 月 3 日の午前 0 時までのすべての予定)。

日時がすべて真夜中に見える場合、次のように簡単にクエリを作成できます。

SELECT * FROM Contractor_Appointments WHERE app_date = '20120402 00:00:00'

SQL Server でクエリを実行するときに日付をフォーマットする最適な方法の詳細については、この回答を参照してください。

編集

インサートについても同じことが当てはまります。明確な日時形式を使用する必要があります。詳細については、この質問を参照してください。ただし、効果的には:

INSERT INTO yourtable (date_column) VALUES ('20120402')あなたが望むものをあなたに与えます。

DateTime オブジェクトがある場合、呼び出すDateTime.ToString("yyyyMMdd HH:mm:ss")と、正しくフォーマットされた文字列が得られます。

于 2012-04-02T21:07:53.670 に答える
0

日付が格納されている形式を理解するには、より明確なものに変換してみてください。SQL ServerCONVERT関数の使用:

SELECT TOP 10 
    CONVERT(VARCHAR(26), app_date, 109),
    *
FROM Contractor_Appointments

これにより、より明確な日付が返されます。例:Apr 28 2006 12:32:29:253PM

その他の変換形式については、次のリファレンスを参照してください: http://www.sql-server-helper.com/tips/date-formats.aspx

于 2012-04-02T21:14:27.973 に答える