0

我再次无法将查询从访问转换为 SQL express:

SELECT Sum(T0021_Omzet_prog) AS Expr1
FROM T0021_offertes
WHERE (((T0021_offertes.[T0021_dd_uitvoer])>=#6/1/2013# And (T0021_offertes.[T0021_dd_uitvoer])<#7/1/2013#));

为什么这应该给出错误“# 附近的语法不正确”?

我的表不是空的:

1-1-1900 是一个占位符,我的查询每个月都在循环,所以是的,那里有适合的日期。

4

2 回答 2

1

您应该将#替换为'

SELECT  SUM(T0021_Omzet_prog) AS Expr1
FROM    T0021_offertes
WHERE   ( T0021_offertes.[T0021_dd_uitvoer] >= '2013/06/01'
          AND T0021_offertes.[T0021_dd_uitvoer] < '2013/07/01'
        ) ;

但是,这将取决于datatype,字段是什么?T0021_offertes.[T0021_dd_uitvoer]T0021_offertes.[T0021_dd_uitvoer]

编辑:使用 between 查询

SELECT  SUM(T0021_Omzet_prog) AS Expr1
FROM    T0021_offertes
WHERE   T0021_offertes.[T0021_dd_uitvoer] BETWEEN '06/01/2013 00:00:00'
                                          AND     '07/01/2013 00:00:00' 

上面的日期格式:dd/mm/yyyy,所以这是 1 月 6 日 -> 1 月 7 日,还是需要 6 月 1 日 -> 7 月 1 日?

于 2013-08-29T12:56:54.030 回答
0

您需要使用以下表示法,因为根据 SQL Server 的文化设置,每个其他日期格式都可能会出现错误(我们甚至经历过在 Management Studio 中执行查询将“2013/06/01”解释为 6 月 1 日的情况,而同一服务器上的存储过程解释了与 1 月 6 日相同的字符串):

WHERE (... >= '20130106 00:00:00' AND ... < '20130107 00:00:00')

请注意,当您未明确指定时间时,SQL Server 会将时间解释为“午夜”,因此上述查询等价于:

WHERE (... >= '20130106' AND ... < '20130107')

实际上,这可以转换为

WHERE ... BETWEEN '20130106' AND '20130107'
于 2013-08-29T13:04:01.523 回答