当日期相同时,我的SQL SELECT语句没有拾取任何记录

时间:2013-03-21 15:05:32

标签: sql

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

例如,我有两个文本框“From Date:”和“To Date:”,当我将两个日期相同时(即03/21/2013),即使记录存在,它也不会返回任何内容。

这是我的代码:

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)”。

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

谢谢大家。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

由于sql将datetime字段与最近的毫秒进行比较,因此字符串中的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") + "'";