0

我有一个 SQL Select 语句(使用 C#),当“from”和“to”日期相同但适用于任何其他日期时,它不会拾取任何记录。

例如,我有两个文本框“从日期:”和“到日期:”,当我将两个日期相同(即 2013 年 3 月 21 日)时,即使记录确实存在,它也不会返回任何内容。

这是我的代码:

DateTime fromDt = Convert.ToDateTime(txtFromDate.Text);
DateTime toDt   = Convert.ToDateTime(txtToDate.Text);
string tp       = TpId.SelectedItem.Text.Trim();

string sql  = "SELECT * FROM EDI10000 WHERE Tp_Id = '" + tp + "' and Rec_Date >= '" +  fromDt + "' and Rec_Date <= '" + toDt + "'";

谁能看到可能导致这种情况的原因?

谢谢你

更新:

好的,我得到了它,谢谢你们指引我朝着正确的方向前进。

我最终将“.ToString(“MM-dd-yyyy”) 添加到我的两个变量“fromDt”和“toDt”中,并将“Rec_Date”字段更改为“CONVERT(varchar(10), Rec_Date, 110)” .

这剥夺了所有日期的时间。

谢谢你们。

4

2 回答 2

2

一种可能性是如果Rec_Date是包含时间和日期的时间戳(日期时间)字段。如果比较日期只是日期(基本上被视为午夜),那么对于所有不完全是午夜的值,比较都会失败。

例如,如果Rec_Date = 2013-03-21 15:00:00开始和结束比较日期为2013-03-21,则不包括在内,因为该toDt值不会被视为大于或等于该值。

2013-03-21 15:00:00  >=  2013-03-21  ==>  TRUE
2013-03-21 15:00:00  <=  2013-03-21  ==>  FALSE
于 2013-03-21T15:07:52.490 回答
1

由于 sql 将日期时间字段与最接近的毫秒进行比较,因此字符串到 DateTime 的转换可能会出错。假设您只对比较日期感兴趣而不对时间部分感兴趣,您可以将查询更改为:

string sql  = "SELECT * FROM EDI10000 WHERE Tp_Id = '" + tp + "' and Rec_Date >= '" + fromDt.ToString("yyyy-MM-dd") + "' and Rec_Date <= '" + toDt.ToString("yyyy-MM-dd") + "'";
于 2013-03-21T15:14:49.717 回答