我有一定的日期范围,比方说8-01到8-08。我还有一个拥有1975 - 2014年历史数据的数据库。日期格式为yyyy-mm-dd格式。例如,今天是2014-08-06。我怎样才能获得所有年份的8-01到8-08的历史记录?请记住,我的日期范围在同一个月可能不会很好。另一个例子是7/31到8/07。
基本上,我希望能够做BETWEEN(% - 8-01 AND%-8-08),其中%是通配符。但是,通配符似乎与MS SQL中的日期对象不兼容。我需要将日期转换为字符串吗?获得与年份无关的通用月日范围的最有效方法是什么?
感谢。
答案 0 :(得分:1)
您可以提取月份和日期部分并进行比较:
where
month(<yourdate>) = 8
and day(<yourdate>) between 1 and 8
请注意,如果您在此列上有索引,则不会以这种方式使用它。
答案 1 :(得分:1)
这是一种与我的其他答案不同的方法。这将使所有日期都为1900
年。然后你只需要在你选择的日期之间取任何东西。
SELECT *
FROM Table1
WHERE DATEADD
(
year,
-DATEDIFF(year,'19000101',dateField),
dateField
) BETWEEN'19000801' AND'19000818'
答案 2 :(得分:0)
通配符运算符不能在BETWEEN语句中使用。它实际上只适用于LIKE语句。如果您希望能够修改您的年份,那就是它,您应该将其作为参数传递。 BETWEEN语句将毫无问题地接受。
答案 3 :(得分:0)
DECLARE @StartMonth INT
DECLARE @Month INT
DECLARE @EndMonth INT
DECLARE @StartDay INT
DECLARE @Day INT
DECLARE @EndDay INT
SET @StartMonth = 8
SET @EndMonth = 8
SET @StartDay = 1
SET @EndDay = 8
IF @EndMonth > @StartMonth
BEGIN
@Month = @EndMonth
@StartMonth = @EndMonth
@EndMonth= @Month
END
IF @EndDay > @StartDay
BEGIN
@Day= @EndDay
@StartDay = @EndDay
@EndDay = @Day
END
SELECT *
FROM TABLE
WHERE MONTH(dateField) BETWEEN @StartMonthAND @EndMonth
AND DAY(dateField) BETWEEN @StartDay AND @EndDay