Mam problem z określeniem najlepszego sposobu porównywania dat w SQL na podstawie tylko miesiąca i roku.Porównanie danych SQL Server na podstawie tylko miesiąca i roku.
Wykonujemy obliczenia na podstawie dat, a ponieważ fakturowanie odbywa się co miesiąc, data miesiąca spowodowała większe utrudnienia.
Przykładowo
DECLARE @date1 DATETIME = CAST('6/15/2014' AS DATETIME),
@date2 DATETIME = CAST('6/14/2014' AS DATETIME)
SELECT * FROM tableName WHERE @date1 <= @date2
Powyższy przykład nie zwróciło żadnych wiersze od @ date1 jest większa niż @ data2. Więc chciałbym znaleźć sposób na wyjście z równania.
Podobnie, poniższa sytuacja sprawia mi żal z tego samego powodu.
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
Przeprowadziłem inline konwersje dat, aby uzyskać pierwszy dzień i ostatni dzień miesiąca dla określonej daty.
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
Musi być łatwiejszy sposób na zrobienie tego. Jakieś sugestie?
Której wersji SQL Server? – christiandev
@christiandev Używamy SQL 2008. –
Na marginesie, jeśli nie korzystasz z części czasu, możesz użyć typu danych "DATA". – christiandev