1

DateTimeSQL Server 2008 R2 データベースのテーブルに列があります。私の c# フロント エンドは、日時パラメーターを使用してこのテーブルに行を挿入しています。

DateTime T = DateTime.Now;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "cargridsnapshot";
cmd.Parameters.AddWithValue("@t", T);
cmd.ExecuteNonQuery();

表の行の日時列は次のとおりです。

2013-09-04 16:21:23.450

しかし

select * from table 
where TIMECOLUMN = '2013-09-04 16:21:23.450' 

結果を返しません。

4

4 に答える 4

1

これを使うとどうなるか

Select * from table where convert(date,yourcolumn)=convert(date,your_datetime)

ただし、日付のみで比較されることに注意してください

于 2013-09-04T17:07:55.913 に答える
1

SQL Server は約 1/300 秒までの時間を保存します。使用可能なビットでは正確に表現できない値を使用している可能性があります。

編集

この動作は、次のコードで確認できます。

select CONVERT(DATETIME, '2013-09-04 16:21:23.450') -- returns 2013-09-04 16:21:23.450
select CONVERT(DATETIME, '2013-09-04 16:21:23.451') -- returns 2013-09-04 16:21:23.450
select CONVERT(DATETIME, '2013-09-04 16:21:23.452') -- returns 2013-09-04 16:21:23.453
select CONVERT(DATETIME, '2013-09-04 16:21:23.453') -- returns 2013-09-04 16:21:23.453
select CONVERT(DATETIME, '2013-09-04 16:21:23.454') -- returns 2013-09-04 16:21:23.453
select CONVERT(DATETIME, '2013-09-04 16:21:23.455') -- returns 2013-09-04 16:21:23.457

結論

日時で行を識別しようとしないでください...

于 2013-09-04T16:10:16.233 に答える
1

SQL Server は、文字列をデータベースの値と比較するときに、さまざまな方法で日時を表すことができます。ある月はその日の前にあり、ある日はその月の前にあります。SQL Server のローカリゼーションが問題の原因です。詳細については、こちらをご覧ください。具体的には、 を探しますSET DATEFORMAT

于 2013-09-04T17:13:21.413 に答える
0

SQL Server の型は、 、、または秒datetime単位でのみ正確です。.000.003.007

したがって、で値を保存すると.450、問題ありません。しかし、 で保存すると.451、 に切り捨てられて.450一致しなくなります。

datetime2これは、列タイプを使用することで回避できます。

DateTime.Nowまた、おそらくデータベース に保存するべきではありません。ここを読んでください

于 2013-09-04T16:10:30.140 に答える