我有一个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)”。
这剥夺了所有日期的时间。
谢谢大家。
答案 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") + "'";