MSACCESS日期时间SQL查询

本文关键字:查询 SQL 时间 日期 MSACCESS | 更新日期: 2023-09-27 18:08:17

我来自印度(这可能与这里的文化信息有关)。我正在用c#构建一个桌面应用程序。Net 2010 Express, MS-ACCESS 2010 32位作为后端。我使用OLEDB数据库连接。我有一个名为dt的列作为日期/时间,它有以下值:

2016-09-22:53:32
19-08-2016 22:54:24
20-09-2016 22:56:01
22-09-2016 22:56:27
22-09-2016 22:56:41

我需要按日期,按月和按年获取记录。到目前为止,我无法完成日期部分,所以不能在月和年工作。下面是我的代码:

b.com.CommandText = "SELECT * FROM srvtrans WHERE DateTime.Parse(dt)=@a ORDER BY sno DESC";
b.com.Parameters.Add("@a", dtp_srdmy.Value.ToShortDateString());
Show(dtp_srdmy.Value.ToShortDateString());
b.con.State == ConnectionState.Closed)
 con.Close();
mytemp = new DataTable();
da.Fill(mytemp);

我还尝试了以下变化:

WHERE CONVERT(VARCHAR(10),dt,111)=@a
WHERE CONVERT(VARCHAR(10),dt,101)=@a
WHERE dt LIKE '%@a%' 
WHERE DateTime.Parse(dt)=@a 
WHERE dt=DateValue(@a)
WHERE CAST(dt AS DATE)=@a
WHERE CONVERT(varchar, dt, 101)=@a
WHERE DATE(dt)=@a
WHERE dt=@a

但是没有一个适合我。请回复什么更新应在sql查询获取记录的日期,按月和按年。

MSACCESS日期时间SQL查询

b.com.CommandText = "SELECT * FROM srvtrans WHERE dt = @a ORDER BY sno DESC";
b.com.Parameters.Add(new System.Data.OleDb.OleDbParameter("@a", OleDbType.DBDate) {Value = dtp_srdmy.Value });
con.Open();
  • 您希望为参数值传递本机类型,而不是类型的字符串表示形式。我假设dtp_srdmy可能是一个用户控件(正如@Gord Thompson在下面的评论中指出的,可能是DateTimePicker)或其他类型,其中Value是返回DateTime实例的属性。
  • 如果你想直接比较,底层的存储/提供程序将为你处理比较,所以不要试图将你的值包装在勾号,引号或其他东西中,也不要尝试为存储引擎做转换。
  • 您应该使用OleDbType枚举指定底层访问类型,我猜它是DBDate,但我可能是错的,请在必要时纠正它。
  • 在执行任何命令之前打开连接。我假设您正在使用数据适配器,但没有看到它,请确保它与您的Command相关联。我省略了这部分代码,因为它与问题无关。

下面的代码肯定可以工作:

  b.com.CommandText = "SELECT * FROM srvtrans WHERE DATEVALUE(dt)=DATEVALUE(@a) ORDER BY sno DESC";
  b.com.Parameters.Add("@a", dtp_srdmy.Value);

如果有帮助,请投票。