如何在日期范围内查看记录?

问题描述:

我在我的表测试这样我日期列的类型为varchar的记录。如何在日期范围内查看记录?

Fname  Lname  Date 
vivek  parikh  01-09-2011 10:00:00 PM 
kashyap vyas  02-09-2011 10:50:00 AM 
viral  panchal 02-09-2011 10:00:00 PM 
Arpit  Gosai  03-09-2011 10:00:00 PM 
Darshit Chokshi 04-09-2011 10:00:00 PM 
Sameer  Rangrez 24-08-2011 9:15:12 AM 

我想从页面的日期范围(开始日期和结束日期)中获取记录。

我的代码是

DateTime time = DateTime.Today;    // Use current time 
    string format = "MM-dd-yyyy"; 

    SqlCommand cmd = new SqlCommand("select Fname,Lname,Insert_Date from Test where Insert_Date >= '" + Convert.ToDateTime(TextBox1.Text).ToString(format) + "' and Insert_Date <= '" + Convert.ToDateTime(TextBox2.Text).ToString(format) + "' ", con); 
    DataSet ds = new DataSet(); 
    SqlDataAdapter da = new SqlDataAdapter(cmd); 
    da.Fill(ds); 

    for (int i = 0; i < ds.Tables[0].Rows.Count; i++) 
    { 
     Response.Write(ds.Tables[0].Rows[i]["Fname"].ToString()); 
     Response.Write(ds.Tables[0].Rows[i]["Lname"].ToString()); 
     Response.Write(ds.Tables[0].Rows[i]["Insert_Date"].ToString()+"<br>"); 
    } 
+2

你尝试过什么的C#这么远吗?哪个版本?短LINQ语句应该给你一个非常好的解决方案。 – Matten

+0

从数据库这个拉?如果那么,什么数据库是吗?或者它保存在内存中? –

+0

是其从SQL Server 2008 R2 .. –

建立查询使用Convert(日期时间,字段名,103)转换为varchar为datetime。

您的查询应该是这样的。

SELECT * FROM测试 其中转换(日期时间,field_date,103)> = '2011-01-01' --start日期

转换(日期时间,field_date,103)< =' 2012-01-01'; --end日期

这是你的C#语句应该怎么样子(它应该包括代码指定

SqlCommand cmd = new SqlCommand("select Fname,Lname,Insert_Date from Test where Convert(datetime,Insert_Date,103) >= '" + Convert.ToDateTime(TextBox1.Text).ToString(format) + "' and Convert(datetime,Insert_Date,103) <= '" + Convert.ToDateTime(TextBox2.Text).ToString(format) + "' ", con); 
+0

它给了我“为datetime数据类型varchar数据类型的转换导致一个超出范围的值“ –

+0

你得到它,因为我忘记了为你的日期指定样式编号103。请参阅以下链接了解样式格式[链接] http://www.sqlusa.com/bestpractices/datetimeconversion/ – Habib

SELECT colname的FROM表名WHERE somecol> = '2011-01-09' AND somecol < = '2011-09-24'

+0

比较它没有工作,获取准确的日期sql查询!请给我从上表中详细的解决方案.. –

+0

是一个SQL数据库。张贴一些代码,你已经尝试 – Karthik

+0

看到编辑问: –

SELECT * FROM Test其中,日期> ='2011-09-02'和日期<'2011-0-04'

检出BETWEEN SQL运算符。另外,请确保使用标准SQL Server格式正确地格式化日期以避免和潜在的混淆:yyyymmdd hhmmss,并记住还要考虑日期的时间部分。

下面的SQL语句已经过测试,其中DD-MM-YYYY的日期格式对我们公司的SQL Server 2008和工作正常。

SELECT * 
FROM some_table 
WHERE date_field >= '2011-10-25' and date_field <= '2011-11-26'