比较没有当前月份的SQL日期

时间:2010-10-22 12:47:31

标签: sql ms-access date-math

我在Access中有一个表,其中包含字符串列和日期列。我希望在日期低于22.10.2010时从表中获取所有行,除了本月。所以,我需要从2010年9月30日到......的行

我绑了些东西,但我发现它不对:

SELECT name FROM table WHERE YEAR(date)<=2010 AND MONTH(date)<10

但这个解决方案并不好,我没有其他想法。你能用一般的解决方案来帮助我吗? 感谢

6 个答案:

答案 0 :(得分:1)

访问?

将年,月和“1”(将获得date的第一天)串起来并将其转换为Date

SELECT  *
FROM    MyTable
WHERE   dateColumn 
           < CDate(CStr(YEAR(date)) + "-" + CStr(MONTH(date)) + "-1")

SQL

从日期中减去有问题的日期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