我正在使用WebMatrix和SQL Server Compact,只是有一个简单的问题。我有一行代码:
if(cndDateLastModified=="gteq"){stringCompiler+="'CAST(DateLastModified AS datetime)' >= 'CAST(" + DateLastModified + " AS datetime)' ";}////
通过在屏幕上绘制输出,查询具体如下:
SELECT * FROM POITable WHERE 'CAST(DateLastModified AS datetime)' >= 'CAST(09/25/2012 AS datetime)'
由于某种原因,它返回指定日期之前,之后和之后的所有行。 在查询时我仍然有点绿,但是对于所有研究过的帐户,这应该有用。显然它正在做一些我不太喜欢的事情,考虑到这一点是可以理解的。
关于如何让我按照我想要的方式工作的任何想法?它还在尝试比较字符串或其他格式吗?
注意:对于两次转换,我都尝试使用CONVERT(datetime,DateLastModified)和CONVERT(datetime,DateLastModified,1)。
另一个注意事项:它作为字符串存储在数据库中。
另一个注意事项:如果我切换条件(从> =到< =)它会反过来并且不会返回任何行,我会考虑第一个意外的结果集,但仍然不知道为什么
有什么想法吗?
答案 0 :(得分:3)
因为您使用单引号比较两个字符串。 'CAST(....)'与'CAST(...)'。你也可以写WHERE'Ginger'> ='Fred'你会得到相同的结果。 :d
您应该需要的是: FROM POITable WHERE CAST(DateLastModified AS datetime)> = CAST('09 / 25 / 2012'AS datetime)
在文字日期周围使用单引号。 '09 / 25 / 2012'
但是,如果您使用的是SQL Server,则可以使用WHERE CAST(DateLastModified AS datetime)> ='2012-09-25'
此外,如果表的DateLastModified列已经是日期时间,请删除强制转换。 Cast用于将字符串转换为数据类型。我的预感就是你需要的是:
WHERE DateLastModified >= '2012-09-25' /* ISO date strings are understood and accepted by SQL Server. */
or
WHERE DateLastModified >= GETDATE() /*Everything in the future, time inclusive.*/
or
WHERE DateLastModified >= DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0) /* Everything starting today. */
答案 1 :(得分:1)
应该是这样的
stringCompiler+="CAST(DateLastModified AS datetime) >= CAST('" + DateLastModified + "' AS datetime) "
请注意单引号的位置已更改
那会给你
CAST(DateLastModified AS datetime) >= CAST('09/25/2012' AS datetime)