0

我的问题是如果日期字段大于当前日期,我想从数据库中选择记录

我使用以下代码

SELECT 
    Id, eve_name, eve_date, eve_place,eve_desc 
FROM 
    EventDetails 
WHERE 
    CONVERT(varchar(10), eve_date, 101) >= CONVERT(varchar(10), " + DateTime.Now.ToShortDateString() + ",101)"

但它不工作

我将数据库中的日期列作为DateTime.. 并使用 jquery 日期时间选择器保存日期时间

4

4 回答 4

1

假设服务器日期是可以接受的,并且这是 SQL Server(它看起来像,因为您使用的是CONVERT),您可以在 SQL 中执行此操作:

SELECT 
    Id, eve_name, eve_date, eve_place,eve_desc 
FROM 
    EventDetails 
WHERE 
    eve_date >= DATEADD(day,DATEDIFF(day,0,CURRENT_TIMESTAMP),0)

这也可以在 上使用索引eve_date,如果有的话 - 因为我不再对它应用任何功能。我正在使用DATEADD/DATEDIFF从当前日期时间中删除时间部分(通过 获得CURRENT_TIMESTAMP)。

于 2013-06-06T06:38:20.160 回答
1

如果您使用的是 SQL Server,则可以使用 GETDATE() 函数。这将返回当前日期/时间。如果您的日期时间字段仅包含 DATE 部分,则需要去除 GETDATE() 结果的时间部分。

SELECT
  *
FROM
  eventdetails
WHERE
  eve_date>=CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS DATETIME);

您将看到时间部分通过将 GETDATE() 转换为浮动、放置并将其转换回 DATETIME 类型而去除了结果。还有其他方法可以做到这一点,参见 Damien 的解决方案。由于引擎盖下的 DATETIME 存储为 FLOAT,因此只调用了一个普通函数 (FLOOR),并且比 DATEADD/DATEDIFF 技巧执行得更好。

如果 eve_date 也可以包含 TIME 部分,并且您只想比较 DATE 部分,则还必须 CAST/CONVERT eve_date 进行比较:

SELECT
  *
FROM
  eventdetails
WHERE
  CAST(FLOOR(CAST(eve_date AS FLOAT)) AS DATETIME)>=CAST(FLOOR(CAST(GETDATE() AS FLOAT)) AS DATETIME);

现在这一切都是从 SQL Server 2005 及以下版本的角度编写的,其中不存在 DATE 类型。对于 SQL Server 2008 及更高版本,转换为 DATE 类型也会去掉 TIME 部分:

SELECT
  *
FROM
  eventdetails
WHERE
  CAST(eve_date AS DATE)>=CAST(GETDATE() AS DATE);

请注意,GETDATE 函数等效于 ANSI SQL 标准定义的 CURRENT_TIMESTAMP 函数。

于 2013-06-06T07:29:56.843 回答
0

尝试这个,

它很简单,可以满足您的要求

:-
假设您使用的是 SQL SERVER

   SELECT 
        Id, eve_name, eve_date, eve_place,eve_desc 
    FROM 
        EventDetails 
    WHERE 
         eve_date >= getdate()

由于在数据库中 eve_date 列类型是 Datetime ,所以应该没有任何问题。

于 2013-06-06T06:37:05.617 回答
0

将内部数据类型更改CONVERTdatetimefromvarchar

试试这个 SQL 查询:

SELECT 
    Id, eve_name, eve_date, eve_place,eve_desc 
FROM 
    EventDetails 
WHERE 
   eve_date>= CONVERT(datetime, '@dtp',101)

避免 SQL 注入的 C# 代码:

try
{
  cmd=new SqlCommand(SELECT Id, eve_name, eve_date, eve_place,eve_desc FROM         EventDetails WHERE eve_date >= CONVERT(datetime, '@dtp',101),con);
  da=new SqlDataAdapter(cmd);
  cmd.Parameters.AddWithValue("@dtp", DateTime.Now.ToShortDateString());
  ds=new DataSet();
  da.fill(ds);

  //Further Processing

}
catch(Exception ex)
{
   MessageBox.Show(ex.Message);
}

这将起作用。

于 2013-06-06T06:38:15.440 回答