我的问题是,如果日期字段大于当前日期,我想从数据库中选择记录
我使用以下代码
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保存日期时间
答案 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);
}
这样可行。