2016-02-12 158 views
2

我有一个行代码SELECT语句 - 日期条件

string datenow = DateTime.Now.ToString("dd'/'MM'/'yyyy"); 
"SELECT * from trialevent where date <= '"+datenow+"'"; 

例如,datenow是2016年12月2日

"SELECT * from trialevent where date <= '12/02/2016'"; 

这意味着我想数据,其中日期之后或等于12/02/2016,但我不断收到这个

trialevent | date 
38   | 10/02/2016 
39   | 11/02/2016 
40   | 11/02/2016 
41   | 12/02/2016 

这里的东西,我不希望2016年10月2日和2016年11月2日。 我有一个专栏24/02/2016没有显示。

+0

什么数据类型是你的'date'列?你使用的是什么DBMS? (它很重要;存在语法差异。)您使用哪种语言编写代码?如果它是支持它们的语言,并且该列实际上是DATE或DATETIME类型的,则需要立即停止连接SQL并开始使用参数化查询,在这种情况下,您也可以停止使用ToString()并让数据库驱动程序执行正确的转换。 –

+0

我使用日期列的varchar –

+0

为什么?如果是DATE,为什么要使用VARCHAR?这正是你的WHERE不工作的原因。在字符串排序中,'24/02/2016'大于'12/02/2016'(因为'24'大于'12'),因此它应该**在您得到的匹配中。如果您使用了适当的数据类型,则可以在需要时找到所需的数据。 –

回答

3

使用适当的ISO标准日期格式:YYYY-MM-DD。

或者,只是使用的数据库CURDATE()

SELECT * 
from trialevent 
where date <= CURDATE()"; 
+2

是的,或者根本就不将日期时间作为字符串存储在您的数据库(如果可能的话)(这很可能是* real *答案)。 –

+1

@Joey:你很迷惑**介绍**(你的国家更常见)和**数据**(这是它存储的内部方式)。他们不是一回事,你不应该把它们当作是对待;有各种各样的具体数据类型是有原因的,不仅仅是因为有人认为让他们周围有趣。 –

+0

好的。谢谢! –