我在 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 的结果
那么获取上述两个日期的数据的解决方案是什么?
我在 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 的结果
那么获取上述两个日期的数据的解决方案是什么?
尝试以下查询:
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));
如果您使用的是 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 类型
它不是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-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)
我建议您使用<, <=, >=, 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 或如果您没有指定确切的时间戳。
希望能帮助到你。