我无法确定仅基于月和年比较 SQL 中日期的最佳方法。
我们根据日期进行计算,并且由于按月计费,因此每月的日期造成了更多障碍。
例如
DECLARE @date1 DATETIME = CAST('6/15/2014' AS DATETIME),
@date2 DATETIME = CAST('6/14/2014' AS DATETIME)
SELECT * FROM tableName WHERE @date1 <= @date2
上面的示例不会返回任何行,因为 @date1 大于 @date2。所以我想找到一种方法来摆脱等式。
同样,以下情况也同样让我感到悲伤。
DECLARE @date1 DATETIME = CAST('6/14/2014' AS DATETIME),
@date2 DATETIME = CAST('6/15/2014' AS DATETIME),
@date3 DATETIME = CAST('7/1/2014' AS DATETIME)
SELECT * FROM tableName WHERE @date2 BETWEEN @date1 AND @date3
我已经完成了日期的内联转换,以得出指定日期的月份的第一天和最后一天。
SELECT *
FROM tableName
WHERE date2 BETWEEN
DATEADD(month, DATEDIFF(month, 0, date1), 0) -- The first day of the month for date1
AND
DATEADD(s, -1, DATEADD(mm, DATEDIFF(m, 0, date2) + 1, 0)) -- The lastday of the month for date3
必须有一种更简单的方法来做到这一点。有什么建议?
最佳答案
为了处理不等式,例如在两者之间,我喜欢将日期/时间转换为 YYYYMM 表示,无论是作为字符串还是整数。对于这个例子:
DECLARE @date1 DATETIME = CAST('6/14/2014' AS DATETIME),
@date2 DATETIME = CAST('6/15/2014' AS DATETIME),
@date3 DATETIME = CAST('7/1/2014' AS DATETIME);
SELECT * FROM tableName WHERE @date2 BETWEEN @date1 AND @date3;
我会将查询写为:
SELECT *
FROM tableName
WHERE year(@date2) * 100 + month(@date2) BETWEEN year(@date1) * 100 + month(@date1) AND
year(@date3) * 100 + month(@date1);
关于仅基于月和年的 SQL Server 日期比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26239784/