0

我在 SQL Server 中编写了以下查询:

SELECT * 
FROM AttendanceMaster 
WHERE Date between '8/12/2012' AND '8/20/2012' 

对接查询结果返回 '8/13/2012' AND '8/19/2012'

但它不返回日期 12/8/2012 和日期 8/20/2012 的结果

那么获取上述两个日期的数据的解决方案是什么?

4

5 回答 5

1

尝试以下查询:

SELECT * 
FROM AttendanceMaster 
WHERE CAST(Date AS DATETIME) 
                   BETWEEN DATEADD(DAY , -1 ,CAST('2012-08-12' AS DATETIME)) AND 
                           DATEADD( DAY , 1 ,CAST('2012-08-20' AS DATETIME));
于 2012-10-02T05:23:56.203 回答
0

如果您使用的是 SQL Server 2008,则只需执行以下操作:

SELECT * 
FROM   AttendanceMaster 
WHERE  CONVERT(DATE, [Date]) BETWEEN CAST('2012-08-12' AS DATE) AND CAST('2012-08-20' AS DATE)

编辑:我在这里做了两个假设。

1) 您确实已确认您的AttendanceMaster表中有 [Date] 等于 2012 年 8 月 12 日和/或 20 日的数据 - 您不想寻找一开始就不存在的东西;)

2) [Date] 列很可能是 DATETIME SQL Server 类型

于 2012-10-02T05:29:09.140 回答
0

它不是TO而是AND

select * 
from AttendanceMaster 
where Date between '8/12/2012' AND '8/20/2012' 

尝试将其投射到日期

SELECT * 
FROM   AttendanceMaster 
WHERE  CAST([Date] AS DATE) BETWEEN CAST('2012-08-12' AS DATE) AND CAST('2012-08-20' AS DATE)
于 2012-10-02T05:08:56.147 回答
0

如果您给出日期'2012-08-12''2012-08-20'然后它会返回 和 之间的数据'2012-08-12 0:00 AM''2012-08-20 0:00 AM'因此它不会返回 date 的值'2012-08-12'。因此,您需要将目标日期写为'2012-08-21'

如果您'2012-08-20'在变量中有日期,例如:

DECLARE @FromDate DATETIME
DECLARE @ToDate DATETIME
SET @FromDate = '2012-08-12'
SET @ToDate = '2012-08-20'

DECLARE @NextDate DATETIME

SET @NextDate=CAST(FLOOR(CAST(dateadd(day,1,@ToDate) AS FLOAT)) AS DATETIME)
/*This Returns the Next Day Date.*/

SELECT * 
FROM AttendanceMaster 
WHERE Date between @Date AND @NextDate

或者你可以写成

DECLARE @FromDate DATETIME
DECLARE @ToDate DATETIME
SET @FromDate = '2012-08-12'
SET @ToDate = '2012-08-20'

SELECT * 
FROM AttendanceMaster 
WHERE Date between @Date AND CAST(FLOOR(CAST(dateadd(day,1,@ToDate) AS FLOAT)) AS DATETIME)
于 2012-10-02T05:35:13.477 回答
0

我建议您使用<, <=, >=, or >,因为它们允许比 BETWEEN 更大的灵活性,并且您可以选择包括或排除端点。所以你可以像这样重写你的查询

SELECT * 
FROM AttendanceMaster 
WHERE Date > '8/12/2012 00:00:00' AND Date < '8/21/2012 00:00:00' 

请注意,在上述查询中,结束日期是 21 日而不是 20 日。

另请记住,默认情况下,SQL Server 将采用任何日期,例如 '8/20/2012' AS '8/20/2012 00:00:00',因此如果您使用 BETWEEN 或如果您没有指定确切的时间戳。
希望能帮助到你。

于 2012-10-02T05:36:49.560 回答