我在Access中有一个表,其中包含字符串列和日期列。我希望在日期低于22.10.2010时从表中获取所有行,除了本月。所以,我需要从2010年9月30日到......的行
我绑了些东西,但我发现它不对:
SELECT name FROM table WHERE YEAR(date)<=2010 AND MONTH(date)<10
但这个解决方案并不好,我没有其他想法。你能用一般的解决方案来帮助我吗? 感谢
答案 0 :(得分:1)
将年,月和“1”(将获得date
的第一天)串起来并将其转换为Date
。
SELECT *
FROM MyTable
WHERE dateColumn
< CDate(CStr(YEAR(date)) + "-" + CStr(MONTH(date)) + "-1")
从日期中减去有问题的日期DAY
(减1),以获得当月的第一天。然后返回小于此值的所有行。
DECLARE @date DATE
SET @date = GETDATE()DECLARE
SELECT *
FROM MyTable
WHERE dateColumn
< DATEADD(DAY, -( DATEPART(DAY, @date) - 1 ), @date)
答案 1 :(得分:1)
一个月的第二天是上个月的最后一天:
DateSerial(Year(Date()),Month(Date()),0)
因此:
SELECT [name] FROM [table]
WHERE [date]<=DateSerial(Year(Date()),Month(Date()),0)
答案 2 :(得分:1)
SELECT name FROM table WHERE(YEAR(date)&lt; 2010)OR(YEAR(date)= 2010 AND MONTH(date)&lt; 10)
答案 3 :(得分:0)
您减去到目前为止的月份中的天数并将该日期用于比较
Select myName FROM myTable Where myTable.myDate <=DateAdd("d",-Day(Now()),Now());
上述查询将为您提供所有记录,直到上个月的最后一天结束。
干杯。
答案 4 :(得分:0)
SELECT you_col
FROM YourTable
WHERE your_date
< DATEADD('M',
DATEDIFF('M', #1990-01-01 00:00:00#, NOW()
), #1990-01-01 00:00:00#);
答案 5 :(得分:0)
可以使用以下功能。这些甚至适用于闰年。
'如果你通过#2016/01/20#,你会得到#2016/01/31#
Public Function GetLastDate(tempDate As Date) As Date
GetLastDate = DateSerial(Year(tempDate), Month(tempDate) + 1, 0)
End Function
'如果你通过#2016/01/20#,你得到31
Public Function GetLastDay(tempDate As Date) As Integer
GetLastDay = Day(DateSerial(Year(tempDate), Month(tempDate) + 1, 0))
End Function