gpt4 book ai didi

c# - 为什么我的 SQL 查询在转换后比较日期时选择所有行?

转载 作者:太空宇宙 更新时间:2023-11-03 21:55:11 25 4
gpt4 key购买 nike

我正在将 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) 进行两次转换。

另注:它以字符串的形式存储在数据库中。

另一个注意事项:如果我切换条件(从 >= 到 <=),它会执行相反的操作并且不返回任何行,考虑到第一个意外的结果集,我会有点期待,但仍然不知道为什么。

有什么想法吗?

最佳答案

因为单引号是在比较两个字符串。 “CAST(....)”与“CAST(...)”。你也可以写 WHERE 'Ginger' >= 'Fred' 你会得到相同的结果。 :D

你应该需要的是:FROM POITable WHERE CAST(DateLastModified AS datetime) >= CAST('09/25/2012' AS datetime)

在文字日期周围使用单引号。 '2012 年 9 月 25 日'

但是,如果您使用的是 SQL 服务器,则可以只使用 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. */

关于c# - 为什么我的 SQL 查询在转换后比较日期时选择所有行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12610801/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com