簡體   English   中英

從SQL Server 2008 R2表中選擇datetime列

[英]Select datetime column from SQL Server 2008 R2 table

我在SQL Server 2008 R2數據庫的表上有一個DateTime列。 我的c#前端正在此表中插入帶有datetime參數的行。

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

表格行中的datetime列是這樣的:

2013-09-04 16:21:23.450

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

沒有返回結果。

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

底線

不要試圖用日期時間來標識行...

如果使用這個怎么辦

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

但請注意,它將僅按日期進行比較

在將字符串與數據庫值進行比較時,SQL Server可以通過多種方式表示日期時間。 有些在一天的前一天,有些在一天的前一天。 SQL Server的本地化導致了您的問題; 您可以在此處了解更多信息。 具體來說,尋找SET DATEFORMAT

SQL Server datetime類型僅精確到.000.003.007秒的增量。

因此,當您使用.450保存值時,就可以了。 但是,如果您使用.451保存, .451將其四舍五入為.450 ,然后它將不匹配。

您可以通過使用datetime2列類型來避免這種情況。

另外-您可能不應該在數據庫中存儲DateTime.Now 在這里閱讀

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM