SQL数据库日期列与当前日期进行比较

时间:2013-06-06 06:33:47

标签: c# sql

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

我使用以下代码

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 datetime picker保存日期时间

4 个答案:

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

答案 1 :(得分: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函数。

答案 2 :(得分:0)

试试这个,

  

它很简单,符合您的要求

: -
假设您使用的是SQL SERVER

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

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

答案 3 :(得分:0)

CONVERT内的数据类型从datetime

更改为varchar

尝试此SQL QUERY:

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);
}

这样可行。