У меня возникли проблемы с определением наилучшего способа сравнения дат в 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
Должен быть более простой способ сделать это. Любые предложения?