1

DateTime在 SQL Server 2008 R2 数据库的表上有一个列。我的 c# 前端使用 datetime 参数在此表中插入一行。

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

在将字符串与数据库值进行比较时,SQL Server 可以以多种方式表示日期时间。有些人有前一个月的一天,有些人是前一天。SQL Server 的本地化导致了您的问题;你可以在这里阅读更多关于它的信息。具体来说,寻找SET DATEFORMAT.

于 2013-09-04T17:13:21.413 回答
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 回答
0

SQL Serverdatetime类型仅精确到.000.003.007秒的增量。

因此,当您使用 保存值时.450,就可以了。但是如果你用 保存.451,那将被四舍五入回到.450,然后它就不会匹配。

您可以通过使用datetime2列类型来避免这种情况。

另外-您可能不应该将其存储DateTime.Now在数据库中。 在这里阅读

于 2013-09-04T16:10:30.140 回答